【问题标题】:How to make an "old style" async method awaitable如何使“旧式”异步方法可等待
【发布时间】:2013-02-01 20:21:06
【问题描述】:

如果我有一个带有回调的异步方法

MyMethodAsync( <Input Parameters ...>, Callback);

我怎样才能让它等待?

[此方法适用于 windows phone 7,但应该同样适用于任何类似的 c# 构造]

DNSEndpoint Endpoint = ...
NameResolutionCallback Callback = (nrr) => { ... }
DeviceNetworkInformation.ResolveHostNameAsync(Enpoint, Callback, null);

我想在此调用周围放置一个可等待的包装器,因此我等待回调完成,然后再继续执行下一个命令。

【问题讨论】:

  • 在可移植类库或 .NET 4.5 中,您可以使用 TaskFactory.FromAsync (msdn.microsoft.com/en-us/library/dd321469.aspx) - 我不知道 WP7 的简单等价物。可能有一个具有等效功能的支持库。
  • 我认为 FromAsync 仅适用于定义为 BeginXXX、EndXXX 对的方法?
  • 有各种 FromAsync 重载。我可能没有链接到最合适的链接。
  • @JonSkeet:你能链接到正确的重载吗?据我所见,所有重载都需要IAsyncResult - OP 没有。我错过了什么吗?
  • 看看这个问题的答案:General purpose FromEvent method。这不是您要找的东西,但可能有用。

标签: c# async-await


【解决方案1】:

你可以使用TaskCompletionSource:

var tcs = new TaskCompletionSource<TypeOfCallbackParameter>();

MyMethodAsync(..., r => tcs.SetResult(r));

return tcs.Task;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 2013-07-24
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多