C# 如何创建Task类型的新任务?

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(); 我想避免第二种方

我有:

第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();

我想避免第二种方法。如何在第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)