我有一个Silverlight 5应用程序,其中包含许多具有与此类似的签名的方法:
public void AskConfirmation(Action<bool> callback);
通常,这些方法会引发InteractionRequest以与用户交互,等待输入。
我想利用Task Parallel Library和async / await关键字,所以我想用以下签名定义第二个方法:
public Task<bool> AskConfirmation();
第二种方法依赖于第一种方法。不幸的是,我无法弄清楚如何实现它。
当他们遵循基于事件的异步模式或开始/结束模式时,将异步操作包装到任务中很容易,但在我的情况下这些是明显的过度杀伤,所以我不想实现它们。但是现在我被卡住了。有没有人遇到过同样的问题并找到了解决方案?
答案 0 :(得分:9)
public Task<bool> AskConfirmation()
{
var tcs = new TaskCompletionSource<bool>();
AskConfirmation(b => tcs.TrySetResult(b));
return tcs.Task;
}