Асинхронность без многопоточности - C#
Формулировка задачи:
Несколько дней рою в эту тему. Уяснил что для исполнения асинхронного кода многопоточность не является обязательной, хоть и является важной частью использования асинхронности, в каком то смысле его частной реализацией. Или более точно асинхронное исполнение это действие которые может быть исполнено в не рамках текущего контекста, без блокирования текущего потока.
Теперь по с#. По какому тогда принципу работает await? Он дожидается ответа, исполняя действие в новом потоке? Вроде бы нет, именно в этом я не уверен. Может ли кто тогда привести код использование асинхронности без использования многопоточности.
Решение задачи: «Асинхронность без многопоточности»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication6 {
class Program {
static void Main(string[] args) {
//Тут запускается задача, а управление возвращается основному потоку
var awaiter = Task.Run(() => {
Thread.Sleep(2000);
}).GetAwaiter();
awaiter.OnCompleted(() => {
Console.WriteLine("Task ended!");
});
//Тут можно продолжать работу в основном потоке,пока задача не завершиться
Console.WriteLine("Doing some work...");
Console.ReadLine();
}
}
}