Jan*_*zki 3 c# asynchronous async-await
我已经阅读了Stephen Toub的文章和Stephen Cleary的帖子,但我仍然不清楚如何最好地实现异步方法,即轮询邮件服务器.
根据我从那些文章中理解,我喜欢优化卸载(不阻止UI线程)和可伸缩性(使用最少量的资源).现在我最终认为使用Task.Delay是最好的方法.但是,我不确定.是否TaskCompletionSource与计时器相结合更好的解决方案?还有其他解决方案吗?
这是我到目前为止:
private async Task<int> WaitForMessages()
{
int messageCount = popClient.GetMessageCount();
while (messageCount == 0)
{
await Task.Delay(1000);
messageCount = popClient.GetMessageCount();
}
return messageCount;
}
Run Code Online (Sandbox Code Playgroud)
PS:我知道,取消和超时仍然缺失.
Task.Delay本身基本上是TaskCompletionSource一个Timer.自己重新创建它是没有意义的.
使用Task.Delay非常适合异步等待轮询.
但是,另一方通知您的异步API 更好,因为您不需要轮询开始.如果您可以控制,popClient可能需要考虑完全更改API.
| 归档时间: |
|
| 查看次数: |
2285 次 |
| 最近记录: |