Почему Task.Factory.StartNew для Async Lambda Work, когда на вызов Lambda напрямую нет?C#

Место общения программистов C#
Anonymous
 Почему Task.Factory.StartNew для Async Lambda Work, когда на вызов Lambda напрямую нет?

Сообщение Anonymous »

Я пишу консольное приложение, которое необходимо скопировать ввода консоли по одному клавишу за раз в розетку (а также делаю другие вещи). Для этого я полагаю, что у меня есть пара вариантов. В предсказание времен я бы развернул ветку для выполнения работы, но для этой конкретной реализации я решил вместо этого использовать задачу . Это привело к некоторой путанице с моей стороны. < /P>
У меня есть эта простая функция: < /p>

Код: Выделить всё

private static async Task ReadConsoleInput(Socket socket, Encoding encoding, CancellationToken cancellationToken)
{
var inputCharacter = new char[1]; // we only input one character at a time
var convertedBytes = new byte[4]; // four should be enough for anyone!

while (!cancellationToken.IsCancellationRequested) {
var readKey = Console.ReadKey(true);

inputCharacter[0] = readKey.KeyChar;

var byteCount = encoding.GetBytes(inputCharacter, convertedBytes);

await socket.SendAsync(convertedBytes.AsMemory(0, byteCount), cancellationToken);
}
}
Если я запускаю задачу для этого таким образом:

Код: Выделить всё

 var consoleReadTask = Task.Factory.StartNew(
async () => await ReadConsoleInput(socket, encoding, tokenSource.Token),
tokenSource.Token,
TaskCreationOptions.None,
TaskScheduler.Default);
< /code>
Все функционирует правильно. Однако это кажется мне довольно странным, потому что readconsoleinput 
, будучи асинхронным , уже возвращает задачу . Таким образом, я подумал, что будет точно так же, чтобы начать задачу таким образом:

Код: Выделить всё

var consoleReadTask = ReadConsoleInput(socket, encoding, tokenSource.Token);
< /code>
Однако это оказалось неверным. Моя программа висит (где -то еще, я не изучал ее, потому что это не главное здесь), прежде чем я когда -либо прочитал какой -либо ввод. Task.Factory.StartNew 
реализация кажется странной , потому что обычно человек не запускает задачу с асинхронизированной лямбда (верно? Я сумасшедший?), Но обе эти два реализации>

Подробнее здесь: https://stackoverflow.com/questions/794 ... the-lambda

Вернуться в «C#»