首页 > 解决方案 > Java 开发人员理解 C# “async/await” 模式

问题描述

我来自 Java 开发环境,并已开始使用 C# 编写代码。我注意到 C# 中的“异步/等待”模式,这是我在 Java 中从未见过的。究竟是什么?我已经浏览了一段时间的互联网,但找不到明确的解释来澄清我对它的理解。

因此,让我们定义以下场景:

  1. 线程“T”(例如 GUI 线程)正在执行 GUI 异步函数“F”</li>
  2. 在异步函数“F”的某个时刻,我们在“可等待”对象“A”(很可能是任务/任务<>)上调用“等待”。
  3. 然后,“等待”调用将释放/让出(但不暂停)线程“T”(在本例中为 GUI 线程)的执行,以便在“等待”时运行/执行一些其他任务A' 正在执行它的工作。
  4. 当“awaitable”“A”对象完成其工作时,异步函数“F”的执行将恢复。在上述场景中(如果我描述正确的话),哪个线程将执行 'awaitable' 'A' 方法?– GUI 线程或池中的其他线程?如果它是一个池线程(不是 GUI 线程)并且我在该方法中访问 GUI 资源(例如按钮、标签、网格视图等),我会破坏 GUI 线程数据吗?请记住,我来自 Java 世界,那里只有一个 GUI 线程可以更改/操作 GUI 资源。

标签: javac#multithreadingasynchronousasync-await

解决方案


首先,这两种语法都是不同的。

线程语法:-

Thread thread = new Thread(() => VoidMethod("","",""));

thread.Start();

https://www.c-sharpcorner.com/blogs/asynchronous-multithreaded-programming-with-example-in-c-sharp

如果您使用此线程没有返回任何值。而整个请求完成。

任务/任务<> 语法:-

public async Task<int> VoidMethod("","","")
{
   await Task.Run(() => VoidMethod("","",""));
   return 1; 
}

https://www.c-sharpcorner.com/article/async-and-await-in-c-sharp/

如果您使用此方法返回值。而整个请求完成。


推荐阅读