【发布时间】:2017-07-28 12:04:26
【问题描述】:
我有:
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?
我可以使用以下方法,但它给我带来了一系列不同的问题。
Task task = doWork();
task.Wait();
我想避免第二种方法。如何在第 X 行实例化 async Task 类型的新 Task?
【问题讨论】:
-
Task task = doWork();但任务将是同步的,因为您不在函数内部使用await -
您显然查看了msdn.microsoft.com/en-us/library/dd321321(v=vs.110).aspx 以了解需要什么类型 - 有点不清楚您有什么问题......您能解释一下您真正想用这段代码实现什么吗?
-
@Gusman,是的,
await里面有doWork的东西,但它不应该仍然适用于空任务吗?我剥离了实际代码,以免混淆问题。 -
对不起,我想我不明白你的问题,你的意思是什么?任务可能异步执行,也可能不异步执行,这取决于计划者的决定,但在
async函数的情况下有一个特殊考虑,只有awaited调用将使函数异步执行(而不是总是,取决于计划者),如果你不添加任何await,它肯定会同步执行。如果您想要在新的异步任务中执行同步代码,则不要将该函数标记为async,返回void并使用Task.Run(yourFunction); -
执行部分我还没来。到目前为止,我还有一个编译问题。