gpt4 book ai didi

c# - C# async 和 Java ExecutorService 的区别

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:21 25 4
gpt4 key购买 nike

C# 有一个很酷的新特性

public Task<string> async f()
{
string r = LongCompute();
return r;
}

但这不等同于

public Future<String> f() {
return Globals.executorService.submit(new Callable<String>() {
public String call() throws Exception {
String r = longCompute();
return r;
}
});
}

在 Java 中,您可以更灵活地选择运行任务的线程池。

等待呢?相当于直接调用get

string s = await f();

就像

String s = f().get();

C# 是否还有更多内容,或者它确实只是 Java 版本的语法糖? (我不是 C# 大师,所以我可能会遗漏一些东西)。

最佳答案

不,await 不像只是调用 get()还有很多

当您在 C# 中使用 await 表达式时,编译器会有效地创建一个延续,因此如果等待尚未完成,该方法可以立即返回,并且只有在完成时才继续处理.延续将在适当的上下文中运行 - 因此,如果您在 await 表达式之前的 UI 线程上,您将在之后的 UI 线程上继续,但不会阻塞 UI 线程等待结果。例如:

public async void HandleButtonClick(object sender, EventArgs e)
{
// All of this method will run in the UI thread, which it needs
// to as it touches the UI... however, it won't block when it does
// the web operation.

string url = urlTextBox.Text;
WebClient client = new WebClient();
string webText = await client.DownloadStringTaskAsync(url);

// Continuation... automatically called in the UI thread, with appropriate
// context (local variables etc) which we used earlier.
sizeTextBox.Text = string.Format("{0}: {1}", url, webText.Length);
}

最终它都是语法糖,但比您展示的要复杂得多。

网络上已经提供了大量详细信息。例如:

关于c# - C# async 和 Java ExecutorService 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9904067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com