는 ... 내가 비동기 방법을Tasks를 기능적으로 유창한 스타일로 동 기적으로 호출하는 방법은 무엇입니까?
public async string MyAsyncMethod() { return await AnyLongRunOperation(); }
가정 그리고 나는 동기 비동기 메서드 호출하는 일반적인 방법이 : 그런 다음 호출은 다음과 같이 할 수
public static TResult CallSynchronously<TResult>(Func<Task<TResult>> Operation)
{
var CallingTask = Task.Run(() => Operation());
CallingTask.Wait();
return CallingTask.Result;
}
를 (잘 작동하는) : 나는 기능 유창한 스타일로 호출 할 수있는 확장 메서드에서 그 방법을 변환 할 경우
는string ResultMessage = CallSynchronously(() => MyAsyncMethod());
하지만 (그래서 람다 a를 통과 피하기 위해 의 매개 변수)를 선택한 다음, 나는 ... ...이 함께
var Result = MyAsyncMethod().CallSynchronously();
을
public static TResult CallSynchronously<TResult>(this Task<TResult> Operation)
{
var CallingTask = Task.Run(() => Operation.Result);
CallingTask.Wait();
return CallingTask.Result;
}
그래서 지금처럼 호출 할 수 있습니다를 tryed 그러나 문제는 여기에있다 : 그것은 달려!
그래서 질문입니다. 기능성 유창한 스타일로 작업을 동 기적으로 호출하는 방법은 무엇입니까?
내가 당신에게 사건을 줄 것이다 : 당신은 다른 웹 서비스에 의존하는 중간 웹 서비스, 계산해야하는 대신 함께 동기 대비 비동기 코드를 해킹 시도의
, 단지 비동기 포옹 결과. 비동기가 항상 가능하지는 않습니다. –
설명을 주셔서 감사합니다. 그러나 질문은 '왜'정지하지 않고 매달리지 않고 유창하게 (기능적 스타일) '부르는 법'입니다. –
@ NéstorSanchezA : 귀하의 경우에는 중간 웹 서비스를 비동기로 설정하십시오. 처음으로 포장하지 않으면 유창한 방법이 없습니다 (예 :'Fluent (MyAsyncMethod) .CallSynchronously()'). –