c# - C# 中的异步修饰符

标签 c#

我有一个问题,这两种方法有什么区别?

    async private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        Thread.Sleep(2000);
    }

    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
        Thread.Sleep(2000);
    }

它们都阻止了我的用户界面。我知道我必须启动另一个线程以避免阻塞,但我发现:

“异步方法提供了一种方便的方法来执行可能长时间运行的工作,而不会阻塞调用者的线程”。

我有点困惑。

最佳答案

添加 async 本身除了允许方法体使用 await 关键字外什么都不做。正确实现的异步方法不会阻塞 UI 线程,但实现不当的方法肯定会阻塞。

您可能想做的是:

async private void Button_Click_1(object sender, RoutedEventArgs e)
{
    await Task.Delay(2000);
    MessageBox.Show("All done!");
}

关于c# - C# 中的异步修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17406591/

相关文章:

c# - 如何将 MemoryStream 写入 byte[]

c# - Java 到 C# - CallableStatement 转换

c# - C#数据库阻塞线程不利于大量客户端

c# - 为什么我不能使 BackgroundWorker() 按预期工作?

c# - 如何清除 NLog 中的 MemoryTarget 日志?

c# - dbContext.SaveChanges() 不保存也不输出错误

c# - 删除 xmlns :i and xmlns from webapi

c# - 为什么我们不能在 while 循环中定义一个变量?

c# - 从 C# 网页(包括 IIS)获取当前登录的 Active Directory 用户

c# - 如何让设计者序列化 WinForms 中的对象集合?