等到异步方法完成。 (函数返回IAsyncResult)

时间:2013-07-02 10:26:25

标签: c# visual-studio-2010 .net-4.0 .net-4.5 async-await

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

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

我可以理解,使用await的唯一目的不是在进行非常长时间的操作时阻止UI 并且它还有一些回调函数可用于执行" func"

的结果

在我的情况下,我必须等待(必须等待),直到我得到func的结果。

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

编辑:

我为什么要这样做?

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

1 个答案:

答案 0 :(得分:5)

您所描述的是在任务之前的异步编程模型,并且在.NET至v.3.5中广泛使用。这是所有BeginXXX / EndXXX方法对使用的模型。

您可以使用convert APM calls to TPL方法FromAsync任务。以下示例来自文档,并从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);