无法等待异步调用中的对象

灾民

我有一个称为的方法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

乔恩·斯基特

我想你误会了如何asyncawait作品。如果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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法等待 Javascript 中的异步调用

从异步调用中仅获取对象

等待XCTestCase的setUp()中的多个异步调用

等待多个异步调用在RxJava中完成

等待GWT异步调用中的数据库结果

如何同步调用异步(等待)方法?

在快速脚本中等待异步调用

等待多个异步调用完成?

异步方法中的最后一个异步调用需要等待吗?

无法使用异步/等待中的对象

一行中有多个等待对象(嵌套的异步调用)

无法使Angular-JS在继续进行之前等待异步调用

不等待异步调用仍然是异步的,对吗?

如何异步调用方法并等待API调用完成

你如何等待所有异步调用在Java中完成?

如何在同步函数中等待JavaScript中的异步调用?

等待JS函数中的异步调用结束。(jQuery.Deferred吗?)

如何在运行测试之前让XCTest等待setUp中的异步调用?

在JavaScript中等待异步调用在Node js中没有console.log

等待Azure Functions中的异步调用时是否需要/有利于ConfigureAwait(false)

在MVC中从同步调用异步而没有等待时,TPL任务死锁

异步调用后无法刷新UI

提交表单之前,请等待异步调用完成

如何等待来自forEach循环的多个异步调用?

如何让另一个异步调用等待?

异步调用不等待完成,然后立即转到

在React渲染之前等待多个异步调用完成

具有顶级功能的嵌套异步调用正在等待

用多个异步调用的结果填充 ObservableCollection,无需等待