如何将带有回调参数的方法包装到Task中?

时间:2012-01-31 19:24:47

标签: c# callback task-parallel-library silverlight-5.0

我有一个Silverlight 5应用程序,其中包含许多具有与此类似的签名的方法:

public void AskConfirmation(Action<bool> callback);

通常,这些方法会引发InteractionRequest以与用户交互,等待输入。

我想利用Task Parallel Library和async / await关键字,所以我想用以下签名定义第二个方法:

public Task<bool> AskConfirmation();

第二种方法依赖于第一种方法。不幸的是,我无法弄清楚如何实现它。

当他们遵循基于事件的异步模式或开始/结束模式时,将异步操作包装到任务中很容易,但在我的情况下这些是明显的过度杀伤,所以我不想实现它们。但是现在我被卡住了。有没有人遇到过同样的问题并找到了解决方案?

1 个答案:

答案 0 :(得分:9)

public Task<bool> AskConfirmation()
{
    var tcs = new TaskCompletionSource<bool>();
    AskConfirmation(b => tcs.TrySetResult(b));
    return tcs.Task;
}