我以为它们基本上是同一件事–编写在处理器(在具有2个以上处理器的机器上)之间拆分任务的程序。然后我正在阅读this,它说:
异步方法旨在成为非阻塞操作。等待异步方法中的表达式不会阻塞当前线程等待的任务正在运行。相反,该表达式将其余部分签名方法的延续,并将控制权返回给的调用者异步方法。
async和await关键字不会导致其他线程成为创建。异步方法不需要多线程,因为异步方法不会在其自己的线程上运行。该方法在当前同步上下文,并且仅当方法已激活。您可以使用Task.Run将受CPU约束的工作移至后台线程,但是后台线程对进程没有帮助那只是在等待结果公布。
而且我想知道是否有人可以帮我将其翻译成英文。似乎在异步性(是一个词?)和线程之间进行了区分,这意味着您可以拥有一个具有异步任务但没有多线程的程序。
现在,我了解异步任务的概念,例如pg上的示例。乔恩·斯凯特(Jon Skeet)的467 [[C#深度,第三版
async void DisplayWebsiteLength ( object sender, EventArgs e )
{
label.Text = "Fetching ...";
using ( HttpClient client = new HttpClient() )
{
Task<string> task = client.GetStringAsync("http://csharpindepth.com");
string text = await task;
label.Text = text.Length.ToString();
}
}
async
关键字的意思是<< [此函数,无论何时被调用,在被调用后所有事情都需要完成该函数的上下文中将不会被调用。“
换句话说,将其写在某些任务的中间
int x = 5;
DisplayWebsiteLength();
double y = Math.Pow((double)x,2000.0);
,因为DisplayWebsiteLength()
与x
或y
无关,将导致DisplayWebsiteLength()
在“后台”执行,例如
processor 1 | processor 2 ------------------------------------------------------------------- int x = 5; | DisplayWebsiteLength() double y = Math.Pow((double)x,2000.0); |
显然,这是一个愚蠢的例子,但是我是正确的还是我完全感到困惑还是什么?
(而且,我对为什么在上述函数的主体中从未使用sender
和e
感到困惑。)我以为它们基本上是同一件事–编写在处理器(在具有2个以上处理器的机器上)之间拆分任务的程序。然后,我正在读这篇文章,它说:异步方法是...