使用 Task.Factory.FromAsync 时出现问题

本文关键字:问题 FromAsync Task Factory 使用 | 更新日期: 2023-09-27 18:36:25

我喜欢新的C# 5的async and await,我想将其设置为我以前的Tcp应用程序之一,我使用了async whay(不是asyncawait,实际上是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是我自己的方法。

真诚的你,佩曼·莫尔塔扎维

使用 Task.Factory.FromAsync 时出现问题

不,就效率而言,这将是非常糟糕的 - 您将醒来并需要每 5 毫秒重新安排一次。您还增加了延迟,同时您在周期之间有效地休眠。

您应该回到尝试使用Task.Factory.FromAsync - 您还没有告诉我们尝试时出了什么问题,因此很难帮助您修复它......一开始可能没有正确实现异步编程模型模式。(您没有提供对BeginSendRequest方法的回调这一事实暗示了这一点。

我希望你的真实代码也没有catch {}...

Poling 作为 IO 完成端口永远无法高效,如果您只是在等待它而不同时做任何事情,为什么还要使用异步方法,它只是在头顶上做广告。