异步等待事件处理器我很困惑如何最好地处理这种情况。我不想等待异步调用的响应。具体来说,我有:公共异步任务FetchQueuedApiAsync(TimeSpanreceiveTimeout){以IApiData形式返回message.Body;}这按预期工作。但是,如果超时,则一定不能调用ReadQueue.EndReceive,否则会抛出异常。显然,FromAsync不知道这一点并盲目地调用它-抛出异常。在超时时不调用EndReceive的要求是由MSMQ实现的,我无法控制。当消息就绪或发生超时时,队列会公开事件。这是您通常检查消息是否存在的地方,然后根据文档调用EndReceive。标准侦听器....ReadQueue.ReceiveCompleted+=ReadQueue_ReceiveCompleted;我的问题是我不知道该怎么做,但仍然需要等待(即我希望现在能够等我,但要通过委托来处理)。那有意义吗?通常,当您想将一些基于任务的异步模型转换为基于任务的异步模型时,如果您还没有为您完成转换的Task方法,请使用TaskCompletionSource来“手动”处理每种情况:publicTaskFetchQueuedApiAsync(TimeSpanreceiveTimeout){vartcs=newTaskCompletionSource();ReadQueue.BeginReceive(receiveTimeout);ReadQueue.ReceiveCompleted+=(sender,args)=>{if(timedOut)tcs.TrySetCanceled();否则if(threwException)tcs.TrySetException(exception);elsetcs.TrySetResult(ReadQueue.EndReceive()asIApiData);};returntcs.Task;}您需要针对未显示的类型的具体情况进行调整,但这是一般的想法。以上就是C#学习教程:等待事件处理器异步分享的全部内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注,本文收藏来自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
