将基于事件的模式转换为异步CTP模式

_fbClient.GetCompleted += new EventHandler(OnFetchPageNotification); _fbClient.GetAsync(_kNotificationPath, new Dictionary { { "access_token", _kPageAccessToken } }); 

如何将上面的代码转换为wp7中的等待代码:

  object = await _fbClient.GetAsync(_kNotificationPath, new Dictionary { { "access_token", _kPageAccessToken } }); 

我也有CTP安装和任务并行库。

Async CTP附带了一个文档,该文档描述了如何使每个现有模式适应基于任务的异步模式。 它说基于事件的一个变量更多,但确实给出了一个例子:

 public static Task DownloadStringAsync(Uri url) { var tcs = new TaskCompletionSource(); var wc = new WebClient(); wc.DownloadStringCompleted += (s,e) => { if (e.Error != null) tcs.TrySetException(e.Error); else if (e.Cancelled) tcs.TrySetCanceled(); else tcs.TrySetResult(e.Result); }; wc.DownloadStringAsync(url); return tcs.Task; } 

在被包装的原始函数是DownloadStringAsync ,参数与传递给此函数的参数匹配,而DownloadStringCompleted是正在监视的事件。


(同样的文档似乎可以在这里下载 – 上面的示例(和更多描述)来自“任务和基于事件的异步模式(EAP)”)