c# - 异步任务正在卡住 UI

标签 c# .net-4.5 async-await

我有这样的方法:

private async Task DoSomething()
{
    // long running work here.
}

当我这样调用方法时,它会阻塞 UI:

Task t = DoSomething();

我必须执行以下操作之一才能使其成为非阻塞的:

Task t = new Task(() => DoSomething());
t.Start();

// Or

Task t = Task.Factory.StartNew(() => DoSomething());

那么当您可以像在框架 4 中一样使用任务并使用 Task.Wait() 代替 await 时,async/await 的意义何在?

编辑: 我理解您的所有答案 - 但没有一个真正解决我的最后一段。谁能给我一个基于任务的多线程示例,其中 async/await 提高了程序的可读性和/或流程?

最佳答案

您如何使用 await?这不会阻止 UI:

    private async Task DoSomething()
    {
        await Task.Delay(5000);
    }

    private async void button1_Click(object sender, EventArgs e)
    {
        await DoSomething();
        MessageBox.Show("Finished");
    }

请注意,我不必编写任何冗长的回调内容。这就是 async/await 的意义所在。

关于c# - 异步任务正在卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592957/

相关文章:

c# - 异步方法恢复后值未更新

c# - 虚拟事件如何在 C# 中工作?

c# - 针对特定异常的单元测试异步方法

c# - 操纵字符串

c# - C# 中的 Azure Function v3 出现问题

c# - 异步编程中的悬挂等待和可能的内存泄漏

c# - Async/Await 如何处理 "old"结果?

asp.net - 带有 col、colgroup、tbody 和 thead 的 HTML 表标记在 Visual Studio 2010 和 Visual Studio 2012 中引发编译错误

c# - .NET 4.5 文件读取性能同步与异步

c# - 当 Controller Action 同步时,有什么理由使用异步/等待吗?