C# 如何创建Task类型的新任务?
我有: 第X行给出了一个编译错误: CS0407“Task Form1.doWork()”的返回类型错误 如何实例化新任务C# 如何创建Task类型的新任务?,c#,.net,task,C#,.net,Task,我有: 第X行给出了一个编译错误: CS0407“Task Form1.doWork()”的返回类型错误 如何实例化新任务doWork 我能够使用下面的方法,但它给了我一组不同的问题 async Task doWork() { Console.WriteLine("do some async work in this method"); } Task task = new Task(doWork); //line X task.Start(); task.Wait(); 我想避免第二种方
doWork
我能够使用下面的方法,但它给了我一组不同的问题
async Task doWork() { Console.WriteLine("do some async work in this method"); }
Task task = new Task(doWork); //line X
task.Start();
task.Wait();
我想避免第二种方法。如何在第X行实例化类型为
async Task
的新Task
?由于doWork()的返回类型为Task
,声明需要是泛型Task
的实例,即Task
,因为doWork()的返回类型为Task
,声明需要是泛型任务的一个实例,即任务在这种情况下,您可能需要定义doWork
以使返回类型为void
。然后,您可以初始化任务
,如图所示,使用任务
构造函数,参数为操作
()
或者,您可以使用
Task task = doWork();
task.Wait();
有关这两种技术之间权衡的讨论,请参阅。在本例中,您可能希望定义doWork
以使返回类型为void
。然后,您可以初始化任务
,如图所示,使用任务
构造函数,参数为操作
()
或者,您可以使用
Task task = doWork();
task.Wait();
有关这两种技术之间权衡的讨论,请参阅。Task=doWork()代码>但任务将是同步的,因为您没有在函数中使用wait
,您显然在查看所需的类型时看到了这一点-因此您不清楚您有什么问题。。。你能解释一下你想用这个代码实现什么吗?@Gusman,是的,在doWork
中有wait
的东西,但它不应该仍然适用于一个空任务吗?我删去了实际的代码,以免给问题蒙上阴影。对不起,我想我不明白你的问题,你是什么意思?任务可以异步执行,也可以不异步执行,这取决于计划者的决定,但对于async
函数,需要特别考虑,只有等待的调用才会使函数异步执行(并非总是取决于计划者),如果不添加任何wait
,它肯定会同步执行。如果您希望在新的异步任务中执行同步代码,则不要将函数标记为async
,返回void
并使用task.Run(您的函数)代码>我还没有谈到执行部分。到目前为止,我还有一个编译问题。Task=doWork()代码>但任务将是同步的,因为您没有在函数中使用wait
,您显然在查看所需的类型时看到了这一点-因此您不清楚您有什么问题。。。你能解释一下你想用这个代码实现什么吗?@Gusman,是的,在doWork
中有wait
的东西,但它不应该仍然适用于一个空任务吗?我删去了实际的代码,以免给问题蒙上阴影。对不起,我想我不明白你的问题,你是什么意思?任务可以异步执行,也可以不异步执行,这取决于计划者的决定,但对于async
函数,需要特别考虑,只有等待的调用才会使函数异步执行(并非总是取决于计划者),如果不添加任何wait
,它肯定会同步执行。如果您希望在新的异步任务中执行同步代码,则不要将函数标记为async
,返回void
并使用task.Run(您的函数)代码>我还没有谈到执行部分。到目前为止,我还有一个编译问题。谢谢。如果我需要为doWork
创建一种类型的Task
,我应该如何在newtask
constructor语句中实例化它?@OldGeezer为什么需要使用Task
constructor?以便于学术理解。我试图弄清楚如何从非异步任务调用异步任务,并且仅在调用的任务完全完成后才返回调用方。谢谢。如果我需要为doWork
创建一种类型的Task
,我应该如何在newtask
constructor语句中实例化它?@OldGeezer为什么需要使用Task
constructor?以便于学术理解。我试图弄清楚如何从非异步任务调用异步任务,并且只有在调用的任务完全完成后才返回调用方。是的<代码>任务任务=新任务(doWork)
是<代码>任务任务=新任务(doWork)