Я читал о Task.Yield
. И как разработчик Javascript я могу сказать, что это задание точно то же самое, что и setTimeout(function (){...},0);
с точки зрения разрешения основного отдельного потока на другие материал aka:
"не принимают всю власть, освобождаются от времени - так что другие будут тоже есть..."
В js он работает особенно в длинных циклах. (не заставляйте браузер замораживать...)
Но я увидел этот пример здесь:
public static async Task < int > FindSeriesSum(int i1)
{
int sum = 0;
for (int i = 0; i < i1; i++)
{
sum += i;
if (i % 1000 == 0) ( after a bulk , release power to main thread)
await Task.Yield();
}
return sum;
}
Как программист JS я могу понять, что они здесь сделали.
НО, как программист на С#, я спрашиваю себя: почему бы не открыть для него задачу?
public static async Task < int > FindSeriesSum(int i1)
{
//do something....
return await MyLongCalculationTask();
//do something
}
Вопрос
С помощью Js я не могу открыть задачу (да, я знаю, что могу на самом деле с веб-работниками). Но с С# я могу.
Если So - зачем даже время от времени отпускать, когда я могу вообще его отпустить?
Изменить
Добавление ссылок:
От здесь:
Из здесь (еще одна книга):