我有一个称为的方法DoSomething()
,该方法返回,object
并且很耗时。因此,当我的GUI显示“正在等待响应... ”消息时,我想使用async / await使其在后台运行。
在我的调用方法中:
Task taskDoSomething = new Task(DoSomethingAsync);
taskDoSomething.Start();
taskDoSomething.Wait();
// continue the program
我的DoSomethingAsync
方法:
private async void DoSomethingAsync()
{
Object result = await DoSomething();
}
但是我得到了错误:
无法等待[ObjectType]
这[ObjectType]
是我自己创建的一种对象。我只是在上面使用对象,以免混淆读者。
请让我知道我在做错什么,使我摆脱了分散的处理BackgroundWorker
。
我想你误会了如何async
和await
作品。如果DoSomething()
是不是为异步而设计的长时间运行的方法,则您可能只想在其他线程中执行它,例如,通过启动一个单独的任务:
Task<object> task = Task.Run<object>(DoSomething);
请注意,这意味着DoSomething
将无法与UI进行交互,因为它将位于不同的线程上。
await
如果需要,则可以执行该任务-但只能通过异步方法进行。在不了解更多上下文的情况下,很难给出更具体的建议。
从您的评论中,您可能会遇到类似以下情况:
private async void HandleButtonClick(object sender, EventArgs e)
{
Task<object> task = Task.Run<object>(DoSomething);
object result = await task;
status.Text = "I've done something";
// Use the result?
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句