Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将带有回调参数的方法包装到任务中?_C#_Callback_Task Parallel Library_Silverlight 5.0 - Fatal编程技术网

C# 如何将带有回调参数的方法包装到任务中?

C# 如何将带有回调参数的方法包装到任务中?,c#,callback,task-parallel-library,silverlight-5.0,C#,Callback,Task Parallel Library,Silverlight 5.0,我有一个Silverlight 5应用程序,其中有一系列方法的签名与此类似: public void AskConfirmation(Action<bool> callback); public作废AskConfirmation(操作回调); 通常,这些方法会引发InteractionRequest与用户交互,等待输入 我想利用Task Parallel库和async/await关键字,因此我想用以下签名定义第二个方法: public Task<bool> AskCo

我有一个Silverlight 5应用程序,其中有一系列方法的签名与此类似:

public void AskConfirmation(Action<bool> callback);
public作废AskConfirmation(操作回调);
通常,这些方法会引发InteractionRequest与用户交互,等待输入

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

public Task<bool> AskConfirmation();
公共任务AskConfirmation();
第二种方法将依赖于第一种方法。不幸的是,我就是不知道如何实现它

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

公共任务AskConfirmation()
public Task<bool> AskConfirmation()
{
    var tcs = new TaskCompletionSource<bool>();
    AskConfirmation(b => tcs.TrySetResult(b));
    return tcs.Task;
}
{ var tcs=new TaskCompletionSource(); ask确认(b=>tcs.TrySetResult(b)); 返回tcs.Task; }
我不确定你在找什么,你在找续集吗?这里的目标确实是能够定义continuations,而不是回调参数。答案很好!只有一件事,您应该在catch@Maxim实际上,这违反了
Task.fromsync
的惯例,它会抛出BeginMethod引发的任何异常,而不是返回一个有故障的任务:感谢这个简单的答案!但有一件事让我感到困扰:在调用其返回任务的Start()方法之前,该方法不应该没有副作用吗?调用此方法接收任务对象实际上会立即“启动”它。难道我不能晚一点开始(或者根本不开始)吗?我当然可以接受,但是……:)你说得对。我错过了另一件事,当然这取决于需要,但我认为最好在新任务中启动ASKConfimation,这样方法将在方法完成之前返回。然后,如果它抛出异常,您应该设置任务异常。@jpatte,Maxim:我给出的方法遵循推荐的模式,请参阅。这也是
Task.fromsync
所做的。