委托System.Action <system.threading.tasks.task>&#39;不接受0个参数

时间:2016-05-12 14:17:43

标签: c# asp.net .net multithreading

System.Threading.Tasks.Task myTask = System.Threading.Tasks.Task.Factory.StartNew(() => TestMethodRefresh());
myTask.ContinueWith(() => TestMethodPrint(null), System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext);

private void TestMethodPrint(System.Threading.Tasks.Task task) {
            testDiv.InnerHtml = "from continue with";

}

我正在尝试使用在.net framework 4.0 vb.net中运行良好的代码,但我无法在asp.net .net framework 4.5中使用它。我不确定这意味着它不带0个参数。我尝试在lamba中提供额外的参数,但它只是说它不需要那些额外数量的参数。

1 个答案:

答案 0 :(得分:2)

编译器告诉你错误,因为你调用.ContinueWith并给它一个委托,它接受0个参数,而.ContinueWith期望Action<Task>不是Action。要解决您的问题,请按以下方式更改代码:

Task myTask = Task.Factory.StartNew(() => TestMethodRefresh());
myTask.ContinueWith((t) => TestMethodPrint(null), new CancellationToken());

其他重载可能如下所示:

Task myTask = Task.Factory.StartNew(() => { });
myTask.ContinueWith((s, o) => TestMethodPrint(null), new object(), TaskScheduler.FromCurrentSynchronizationContext());

您在ContinueWith中接收的参数(t)是上一个任务。查看MSDN了解详情。