C#Task.继续执行';它取决于以前的任务。结果

C#Task.继续执行';它取决于以前的任务。结果,c#,asynchronous,task,C#,Asynchronous,Task,我想知道如何使用Task.ContinueWith()方法来调用int是第一个任务结果的操作。以下是相同的代码示例: Task<int> first_task = GetFirstTask(); Action<int> next_action = (result_from_first) => { //do stuff }; first_task.ContinueWith( () => next_action(first_task.Result) ); Tas

我想知道如何使用Task.ContinueWith()方法来调用int是第一个任务结果的操作。以下是相同的代码示例:

Task<int> first_task = GetFirstTask();
Action<int> next_action = (result_from_first) => { //do stuff };
first_task.ContinueWith( () => next_action(first_task.Result) );
Task first_Task=GetFirstTask();
下一个动作动作=(第一个动作的结果)=>{//do stuff};
第一个任务。继续(()=>下一个操作(第一个任务。结果));
错误:

Error   81  Delegate 'System.Action<System.Threading.Tasks.Task<int>>' does not take 0 arguments
错误81委托“System.Action”不接受0个参数
Task first\u Task=GetFirstTask();
下一个动作动作=(第一个动作的结果)=>{//do stuff};
第一个任务。继续(第一个=>下一个动作(第一个。结果));
应该首先执行任务\u Task=GetFirstTask(); 下一个动作动作=(第一个动作的结果)=>{//do stuff}; 第一个任务。继续(第一个=>下一个动作(第一个。结果));
应该这样做

这比在continuation委托中引用first_任务要好,因为它避免了创建不必要的闭包。这样,您就可以轻松地将操作解耦/重构为它自己的(静态)方法;)C#如何知道“第一”是“第一个任务”?我的回答有一个输入错误。这是正确的。你需要添加一些东西(任何东西)。这是一个lambda表达式:。用通俗易懂的英语,你会说,“让我们先调用第一个任务
然后做一些事情”,而这个事情可能会引用,也可能不会引用
第一个
。在这种情况下,它会执行。@ChaoSXDemon
ContinueWith()
执行一个
操作
,这意味着一个函数只执行一个
任务
,不返回值
first=>next_action(first.Result)
是一个lambda,表示
void函数(Task first){next_action(first.Result)}
,调用此函数时使用
first_Task
作为参数。这比在continuation委托中引用first_任务要好,因为它避免了创建不必要的闭包。这样,您就可以轻松地将操作解耦/重构为它自己的(静态)方法;)C#如何知道“第一”是“第一个任务”?我的回答有一个输入错误。这是正确的。你需要添加一些东西(任何东西)。这是一个lambda表达式:。用通俗易懂的英语,你会说,“让我们先调用第一个任务
然后做一些事情”,而这个事情可能会引用,也可能不会引用
第一个
。在这种情况下,它会执行。@ChaoSXDemon
ContinueWith()
执行一个
操作
,这意味着一个函数只执行一个
任务
,不返回值
first=>next_action(first.Result)
是一个lambda,表示
void函数(Task first){next_action(first.Result)}
,该函数以
first_任务
作为参数调用。
Task<int> first_task = GetFirstTask();
Action<int> next_action = (result_from_first) => { //do stuff };
first_task.ContinueWith( first => next_action(first.Result) );