使用 Task.Factory.FromAsync 时出现问题
本文关键字:问题 FromAsync Task Factory 使用 | 更新日期: 2023-09-27 18:36:25
我喜欢新的C# 5的async and await,我想将其设置为我以前的Tcp应用程序之一,我使用了async whay(不是async和await,实际上是Begin*,End*)
在我的应用程序中,每条消息都有一个响应,因此每次使用 BeginSend 时,您都会收到一条与您首次发送的消息相关的消息。 (让我们假设命令和它的报告)
我想添加一个名为 RequestAsync 的新函数,您可以发送消息并等待响应到来。 让我展示一下用法
string response = await RequestAsync("hi");
在这种情况下,您将发送一条"hi"消息,然后代码等待与此相关的响应。
我在使用Task.Factory.FromAsync时遇到了问题,所以我尝试了以下代码,我想确保性能与TaskFactory方式大致相同。
public async Task<IRequestResult> SendRequestAsync(IRequest request, string message)
{
IRequestResult result = BeginSendRequest(request, message);
while (!result.IsCompleted)
{
await Task.Delay(1);
}
return result;
}
BeginRequest是我自己的方法。
真诚的你,佩曼·莫尔塔扎维
不,就效率而言,这将是非常糟糕的 - 您将醒来并需要每 5 毫秒重新安排一次。您还增加了延迟,同时您在周期之间有效地休眠。
您应该回到尝试使用Task.Factory.FromAsync
- 您还没有告诉我们尝试时出了什么问题,因此很难帮助您修复它......一开始可能没有正确实现异步编程模型模式。(您没有提供对BeginSendRequest
方法的回调这一事实暗示了这一点。
我希望你的真实代码也没有catch {}
...
Poling 作为 IO 完成端口永远无法高效,如果您只是在等待它而不同时做任何事情,为什么还要使用异步方法,它只是在头顶上做广告。