实现异步轮询方法的更好解决方案
本文关键字:更好 解决方案 方法 异步 实现 | 更新日期: 2023-09-27 18:36:38
我已经阅读了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;
}
PS:我知道,取消和超时仍然缺失。
Task.Delay
本身基本上是一个带有Timer
的TaskCompletionSource
。自己重新创建它是没有意义的。
Task.Delay
非常适合使用异步等待进行轮询。
但是,另一方通知您的异步 API 甚至更好,因为您不需要轮询即可开始。如果您可以控制popClient
则可能需要考虑完全更改 API。