Я попытаюсь проиллюстрировать свой вопрос бессмысленным примером, который вы видите ниже.Является ли async-await необходимым условием для параллельной работы двух независимых задач в моей программе?
using System;
using System.IO;
namespace PointlessProgram
{
class PointlessClass
{
public static void WriteFooToTextFile ()
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Hillary\Documents\PointlessFolder\Foo.txt"))
{
file.Write("Foo");
}
}
public static void WriteBarToTextFile ()
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Hillary\Documents\PointlessFolder\Bar.txt"))
{
file.Write("Bar");
}
}
static void Main()
{
WriteFooToTextFile(); // (A)
WriteBarToTextFile(); // (B)
}
}
}
Здесь (B)
не нужно запускать после (A)
, поскольку он не зависит от какой-либо продукции, производимой (A)
и neighter делает (A)
зависит от (B)
. Предположим, что у моего компьютера есть 2 процессора и он будет использовать всю свою вычислительную мощность для запуска этой программы. Будет ли компилятор выяснить, что (A)
и (B)
могут выполняться параллельно или они будут запускать их один за другим, если я не буду писать свой код, чтобы сообщить машине, чтобы он не дождался завершения (A)
до начала выполнения (B)
? И если да, то async
- await
, как я могу изменить это исполнение от
===
A
---
B
===
к
========
A | B
========
???
Что я нахожу в заблуждении о async
- await
является то, что вы не думаете, с точкой зрения partioning вашей программы в самостоятельные задачи A
, B
, C
...; вы вместо этого думаете в терминах «эта задача» и «все остальное», и все, что вы делаете, говорит «все остальное может продолжать работать, пока эта задача выполняется».
Пожалуйста, помогите мне разобраться.
Я не уверен, что вы просите уже не может дать ответ на поиск и чтение о асинхронном, многопоточность, TPL (Task Parallel Library) и т.д. –
@KoryGill Согласен..но у кого-то, кто работает для президента, не хватает времени, чтобы это сделать;). – i3arnon