.NET 异步的实现方式

作者 : 慕源网 本文共1760个字,预计阅读时间需要5分钟 发布时间: 2022-04-26 共247人阅读

介绍

.NET 异步的实现方式,在我之前的文章中,我谈到了使用 .NET framework进行异步编程。在那里,我们看到了如何使用 async 和 await 关键字使函数以异步模式运行。我们看到了如何调用 .NET 提供的各种可等待函数。几乎每个主要的 .NET 类都提供了许多可以等待的函数,这些函数大多以字母 Async 结尾,以将它们与常规函数区分开来。但是,当我们想要将自己的函数从同步更改为异步时会发生什么。如何才能做到这一点?我们将在本文中讨论这一点。

将您自己的函数更改为可等待的

我们将使用 .NET framework Windows 窗体应用程序来演示异步函数到异步函数的转换,或者更简单地说,我们将创建现有函数的异步版本。那么,让我们开始吧。

我们创建一个简单的 .NET framework Windows 窗体应用程序,并在其上放置一个按钮 (btnTest) 和一个标签 (lblValue),并在按钮单击事件上添加代码,如下所示:

using System;  
using System.Threading;  
using System.Windows.Forms;  
  
namespace AsyncAwaitNF  
{  
    public partial class Form1 : Form  
    {  
        public Form1()  
        {  
            InitializeComponent();  
        }  
  
        private void btnTest_Click(object sender, EventArgs e)  
        {  
            var a = GetValue();  
            lblValue.Text = a;  
        }  
  
        private string GetValue()  
        {  
            //Simulating a long running process  
            Thread.Sleep(5000);  
            return "Value is displayed now";  
        }  
  
    }  
}  

在这里,我们看到当我们单击按钮时,我们调用了一个名为“GetValue()”的函数。这个函数,我们使用 Thread.Sleep 函数做了一些长时间的处理,然后它返回一个显示在主窗体标签上的值。

该操作是同步的,在函数运行时表单被displayed ,无法使用。

接下来,我们将创建此函数的异步版本,如下所示:

using System;  
using System.Threading;  
using System.Threading.Tasks;  
using System.Windows.Forms;  
  
namespace AsyncAwaitNF  
{  
    public partial class Form1 : Form  
    {  
        public Form1()  
        {  
            InitializeComponent();  
        }  
  
        private async void btnTest_Click(object sender, EventArgs e)  
        {  
            var a = await GetValueAsync();  
            lblValue.Text = a;  
        }  
  
        private string GetValue()  
        {  
            //Simulating a long running process  
            Thread.Sleep(5000);  
            return "Value is displayed now";  
        }  
  
        private async Task<string> GetValueAsync()  
        {  
            return await Task.Run(() =>  
            {  
                //Simulating a long running process  
                Thread.Sleep(5000);  
                return "Value is displayed now";  
            });  
        }  
  
    }  
}  

在这里,您会看到我们将函数命名为“GetValueAsync”。我们可以将它命名为任何我们喜欢的名称,但我们只需将 Async 添加到函数的末尾以表明这是该函数的异步版本。其次,我们返回一个字符串的Task,而不是一个简单的字符串,并通过Task.Run函数调用函数逻辑。

现在,如果我们运行应用程序,我们会看到当我们单击按钮时,表单保持响应,并且函数以异步方式运行,5 秒后,我们从函数获得响应并将其显示在主表单中标签。

.NET 异步的实现方式

 

总结

在本文中,我们研究了如何将常规同步函数转换为异步函数。这个过程相当简单,但在我们这样做之前,我们必须了解为什么我们需要这样做,并且只将此逻辑应用于长时间运行的函数,这些函数可能会在处理过程中冻结屏幕。如果可以调用该函数并在后台完成,我建议使用任务并行库来实现这一点。


慕源网 » .NET 异步的实现方式

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录