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

本文关键字:包装 方法 Task 参数 回调 | 更新日期: 2023-09-27 18:21:58

我有一个Silverlight 5应用程序,它有一组签名类似于以下的方法:

public void AskConfirmation(Action<bool> callback);

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

我想利用任务并行库和async/await关键字,因此我想定义具有以下签名的第二个方法:

public Task<bool> AskConfirmation();

第二种方法将依赖于第一种方法。不幸的是,我只是不知道如何实现它

当异步操作遵循基于事件的异步模式或Begin/End模式时,将它们封装到Tasks中很容易,但在我的情况下,这些操作显然是过度的,所以我不想实现它们。但现在我被卡住了。有人遇到过同样的问题并找到了解决方案吗?

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

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