C语言中async函数如何实现异步调用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1935个文字,预计阅读时间需要8分钟。
当然可以,请提供您想要改写的原文,我将为您进行简化改写。
async(C# 参考)
- 如果对方法或表达式使用此修饰符,则其称为异步方法 。如下示例定义了一个名为
ExampleMethodAsync的异步方法:
public async Task<int> ExampleMethodAsync() { // . . . . }
如果不熟悉异步编程,或者不了解异步方法如何在不阻止调用方线程的情况下使用await运算符完成可能需要长时间运行的工作,请阅读使用 async 和 await 的异步编程中的说明。如下代码见于一种异步方法中,且调用HttpClient.GetStringAsync方法:
string contents = await msdn.microsoft.com")).Length; ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n"; // After the following return statement, any method that‘s awaiting // ExampleMethodAsync (in this case, StartButton_Click) can get the // integer result. return exampleInt; } // The example displays the following output: // Preparing to finish ExampleMethodAsync. // Length: 53292
重要
若要深入了解各项任务以及在等待任务期间所执行的代码,请参阅使用 async 和 await 的异步编程。有关使用类似元素的完整 WPF 示例,请参阅演练:使用 Async 和 Await 访问 Web。
返回类型
异步方法可具有以下返回类型:
- Task
- Task<TResult>
- void。对于除事件处理程序以外的代码,通常不鼓励使用
async void方法,因为调用方不能await那些方法,并且必须实现不同的机制来报告成功完成或错误条件。 - 从 C# 7.0 开始,任何具有可访问的
GetAwaiter方法的类型。System.Threading.Tasks.ValueTask<TResult>类型属于此类实现。它通过添加 NuGet 包System.Threading.Tasks.Extensions的方式可用。
此异步方法既不能声明任何in、ref或out参数,也不能具有引用返回值,但它可以调用具有此类参数的方法。
如果异步方法的 语句指定一个 类型的操作数,则应指定Task<TResult>作为方法的返回类型TResult。如果当方法完成时未返回有意义的值,则应使用Task。即,对方法的调用将返回一个Task,但是当Task完成时,任何等待await的所有Task表达式的计算结果都为void。
你应主要使用void返回类型来定义事件处理程序,这些处理程序需要此返回类型。void返回异步方法的调用方不能等待,并且无法捕获该方法引发的异常。
从 C# 7.0 开始,返回另一个类型(通常为值类型),该类型具有GetAwaiter方法,可尽可能减少性能关键代码段中的内存分配。
有关详细信息和示例,请参阅异步返回类型。
请参阅
本文共计1935个文字,预计阅读时间需要8分钟。
当然可以,请提供您想要改写的原文,我将为您进行简化改写。
async(C# 参考)
- 如果对方法或表达式使用此修饰符,则其称为异步方法 。如下示例定义了一个名为
ExampleMethodAsync的异步方法:
public async Task<int> ExampleMethodAsync() { // . . . . }
如果不熟悉异步编程,或者不了解异步方法如何在不阻止调用方线程的情况下使用await运算符完成可能需要长时间运行的工作,请阅读使用 async 和 await 的异步编程中的说明。如下代码见于一种异步方法中,且调用HttpClient.GetStringAsync方法:
string contents = await msdn.microsoft.com")).Length; ResultsTextBox.Text += "Preparing to finish ExampleMethodAsync.\n"; // After the following return statement, any method that‘s awaiting // ExampleMethodAsync (in this case, StartButton_Click) can get the // integer result. return exampleInt; } // The example displays the following output: // Preparing to finish ExampleMethodAsync. // Length: 53292
重要
若要深入了解各项任务以及在等待任务期间所执行的代码,请参阅使用 async 和 await 的异步编程。有关使用类似元素的完整 WPF 示例,请参阅演练:使用 Async 和 Await 访问 Web。
返回类型
异步方法可具有以下返回类型:
- Task
- Task<TResult>
- void。对于除事件处理程序以外的代码,通常不鼓励使用
async void方法,因为调用方不能await那些方法,并且必须实现不同的机制来报告成功完成或错误条件。 - 从 C# 7.0 开始,任何具有可访问的
GetAwaiter方法的类型。System.Threading.Tasks.ValueTask<TResult>类型属于此类实现。它通过添加 NuGet 包System.Threading.Tasks.Extensions的方式可用。
此异步方法既不能声明任何in、ref或out参数,也不能具有引用返回值,但它可以调用具有此类参数的方法。
如果异步方法的 语句指定一个 类型的操作数,则应指定Task<TResult>作为方法的返回类型TResult。如果当方法完成时未返回有意义的值,则应使用Task。即,对方法的调用将返回一个Task,但是当Task完成时,任何等待await的所有Task表达式的计算结果都为void。
你应主要使用void返回类型来定义事件处理程序,这些处理程序需要此返回类型。void返回异步方法的调用方不能等待,并且无法捕获该方法引发的异常。
从 C# 7.0 开始,返回另一个类型(通常为值类型),该类型具有GetAwaiter方法,可尽可能减少性能关键代码段中的内存分配。
有关详细信息和示例,请参阅异步返回类型。

