java - Java 开发人员理解 C# “async/await” 模式
问题描述
我来自 Java 开发环境,并已开始使用 C# 编写代码。我注意到 C# 中的“异步/等待”模式,这是我在 Java 中从未见过的。究竟是什么?我已经浏览了一段时间的互联网,但找不到明确的解释来澄清我对它的理解。
因此,让我们定义以下场景:
- 线程“T”(例如 GUI 线程)正在执行 GUI 异步函数“F”</li>
- 在异步函数“F”的某个时刻,我们在“可等待”对象“A”(很可能是任务/任务<>)上调用“等待”。
- 然后,“等待”调用将释放/让出(但不暂停)线程“T”(在本例中为 GUI 线程)的执行,以便在“等待”时运行/执行一些其他任务A' 正在执行它的工作。
- 当“awaitable”“A”对象完成其工作时,异步函数“F”的执行将恢复。在上述场景中(如果我描述正确的话),哪个线程将执行 'awaitable' 'A' 方法?– GUI 线程或池中的其他线程?如果它是一个池线程(不是 GUI 线程)并且我在该方法中访问 GUI 资源(例如按钮、标签、网格视图等),我会破坏 GUI 线程数据吗?请记住,我来自 Java 世界,那里只有一个 GUI 线程可以更改/操作 GUI 资源。
解决方案
首先,这两种语法都是不同的。
线程语法:-
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/
如果您使用此方法返回值。而整个请求完成。
推荐阅读
- ios - SwiftUI 更新核心数据对象更改视图
- javascript - 如何在 Javascript 中实例化所有键映射到相同值的字典?
- python - 如何在 Azure CI 中实现具有代码覆盖率的并行 pytesting
- c# - 如何解决 log4net:ERROR 无法创建类型的 Appender [aiAppender]
- excel - 如何将用户定义类型传递给 VBA 函数?
- latex - 在 LaTeX 中更改边距
- c# - .Net 中是否有 ZonedDateTime (Java)?
- kotlin - 如何声明一个可变列表数组并使用起始值填充列表
- python - 使用 Python 进行 Pandas 系列字符串操作 - 第一个两个字符翻转并附加到字符串末尾
- ios - 如何使用“$Users/Library/Developer/Xcode/DerivedData”中的框架“将二进制文件与库链接”