어떻게하면 async/await
메서드가 실행되고 어떤 스레드에서 약간 흐릿한 지 알았습니다. 나는 사건이 해고 될 때까지 방법을 막고 싶다. 이렇게하려면 ManualResetEvent
을 사용해 보았지만 마지막 waitHandle.Set()
이 호출 될 때까지 모든 async
메서드가 완료 될 때까지 비동기 메서드에 대한 모든 호출을 차단합니다.수동으로 비동기 메서드 차단하기
기반의 이벤트 기반 비동기 접근 방식을 async/await
기반으로 변환하려고 시도 할 때 async
호출을 개별적으로 차단하는 방법이 필요합니다.
어떻게 할 수 있습니까?
업데이트 :이 확신
public async Task<IEnumerable<CustomerNoteInfo>> LoadClientNotesAsync(int id)
{
return await _session.InvokeOperationAsync((client) =>
{
var tcs = new TaskCompletionSource<IEnumerable<CustomerNoteInfo>>();
client.GetCustomerNotesCompleted += (sender, e) =>
{
if (e.Error != null) tcs.TrySetException(e.Error);
else tcs.TrySetResult(e.Result);
};
client.GetCustomerNotesAsync(id);
return tcs.Task;
}).Unwrap();
}
: 스티븐과 Noseratio에서 제공하는 정보를 바탕으로
, 내가 지금이 라인 긴 뭔가 내 비동기 방식을 변경 모든 비동기/작업 기반 프로그래밍을 기다리고있는 모든 사람들에게보기 흉한 것처럼 보일 것입니다. 그러나 이것에 대해 올바른 방향으로 가고 있습니까? 수동 리셋 이벤트로 인해 발생했던 문제가 해결 된 것 같습니다. 이제이 메서드를 여러 번 비동기 적으로 실행할 수 있습니다. :)
휴대용 클래스 라이브러리의 서비스 참조 추가로 생성 된 비동기 메소드 이벤트 쌍과 함께'Task.Factory.FromAsync'를 어떻게 사용합니까? 이 메서드는'IAsyncResult' 등을 반환하지 않으므로. – rtlayzell
이벤트가 있다면 'TaskCompletionSource'를 사용하십시오. [방법 : 작업에서 EAP 패턴 줄이기] (http://msdn.microsoft.com/en-us/library/ee622454(v=vs.110) .aspx) – Noseratio