C语言中async函数如何实现异步调用?

2026-04-29 06:053阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1935个文字,预计阅读时间需要8分钟。

C语言中async函数如何实现异步调用?

当然可以,请提供您想要改写的原文,我将为您进行简化改写。

async(C# 参考)

  • 如果对方法或表达式使用此修饰符,则其称为异步方法 。如下示例定义了一个名为ExampleMethodAsync的异步方法:
C#

public async Task<int> ExampleMethodAsync() { // . . . . }

如果不熟悉异步编程,或者不了解异步方法如何在不阻止调用方线程的情况下使用await运算符完成可能需要长时间运行的工作,请阅读使用 async 和 await 的异步编程中的说明。如下代码见于一种异步方法中,且调用HttpClient.GetStringAsync方法:

C#

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

C语言中async函数如何实现异步调用?

你应主要使用void返回类型来定义事件处理程序,这些处理程序需要此返回类型。void返回异步方法的调用方不能等待,并且无法捕获该方法引发的异常。

从 C# 7.0 开始,返回另一个类型(通常为值类型),该类型具有GetAwaiter方法,可尽可能减少性能关键代码段中的内存分配。

有关详细信息和示例,请参阅异步返回类型。

请参阅

本文共计1935个文字,预计阅读时间需要8分钟。

C语言中async函数如何实现异步调用?

当然可以,请提供您想要改写的原文,我将为您进行简化改写。

async(C# 参考)

  • 如果对方法或表达式使用此修饰符,则其称为异步方法 。如下示例定义了一个名为ExampleMethodAsync的异步方法:
C#

public async Task<int> ExampleMethodAsync() { // . . . . }

如果不熟悉异步编程,或者不了解异步方法如何在不阻止调用方线程的情况下使用await运算符完成可能需要长时间运行的工作,请阅读使用 async 和 await 的异步编程中的说明。如下代码见于一种异步方法中,且调用HttpClient.GetStringAsync方法:

C#

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

C语言中async函数如何实现异步调用?

你应主要使用void返回类型来定义事件处理程序,这些处理程序需要此返回类型。void返回异步方法的调用方不能等待,并且无法捕获该方法引发的异常。

从 C# 7.0 开始,返回另一个类型(通常为值类型),该类型具有GetAwaiter方法,可尽可能减少性能关键代码段中的内存分配。

有关详细信息和示例,请参阅异步返回类型。

请参阅