Я думал, что это в основном одно и то же - написание программ, которые разделяют задачи между процессорами (на машинах с процессорами 2+). Затем я читаю это, где написано:
Асинхронные методы предназначены для неблокирующих операций. Ожидание выражение в асинхронном методе не блокирует текущий поток, пока ожидаемая задача выполняется. Вместо этого выражение подписывает остальные метода в качестве продолжения и возвращает управление вызывающей стороне асинхронный метод.
Ключевые слова async и await не приводят к созданию дополнительных потоков создано. Асинхронные методы не требуют многопоточности, потому что асинхронные Метод не работает в своем собственном потоке. Метод работает на текущем контекст синхронизации и использует время в потоке, только когда метод активен. Вы можете использовать Task.Run для перемещения работы с процессором в фоновый поток, но фоновый поток не помогает с процессом это просто ожидание результатов, чтобы стать доступными.
и мне интересно, может ли кто-нибудь перевести это на английский для меня. Кажется, что проводится различие между асинхронностью (это слово?) И многопоточностью, и подразумевается, что у вас может быть программа, которая имеет асинхронные задачи, но не поддерживает многопоточность.
Теперь я понимаю идею асинхронных задач, таких как пример на pg. 467 из Jon Skeet С# In Depth, третье издание
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
никогда не используются в теле вышеуказанной функции.)