0

我有一个网络服务和这个特殊的功能:

IAsyncResult func(object signature, AsyncCallback callBack, object asyncState)

我可以理解,使用 await 的唯一目的不是在执行很长的操作时阻塞 UI,而且它还有一些回调函数可用于执行“func”的结果

就我而言,我必须等待(必须等待)直到我得到 func 的结果。

任何建议我应该如何等到我得到 func 的结果(换句话说,坚持到我得到结果)

编辑:

我为什么要那么做 ?

我只想检查签名是否属于特定类型。如果是这样,该函数将停止执行并返回 0。这是我从 func 中需要的唯一功能,并且认为不值得定义回调方法和状态对象。

4

1 回答 1

5

您所描述的是异步编程模型,它早于任务,并在 .NET 中广泛使用,直到 v. 3.5。这是所有 BeginXXX/EndXXX 方法对使用的模型。

您可以使用FromAsync方法将 APM 调用转换为 TPL任务。以下示例来自文档,并从 FileStream BeginRead 和 EndRead 方法创建一个任务。

BeginRead 有一个类似于 func 的签名:

 IAsyncResult BeginRead(byte[] array,int offset,
    int numBytes,
    AsyncCallback userCallback,
    Object stateObject)

您可以将其转换为这样的任务:

Task<int> task = Task<int>.Factory.FromAsync(
        fs.BeginRead, fs.EndRead, data, 0, data.Length, null);

一旦你有一个任务,你可以等待它:

var bytes = await Task<int>.Factory.FromAsync(
        fs.BeginRead, fs.EndRead, data, 0, data.Length, null);
于 2013-07-02T11:24:37.557 回答