Почему 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему Task.Factory.StartNew для Async Lambda Work, когда на вызов Lambda напрямую нет?
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Уменьшение накладных расходов на замыкание в Task.Run/Factory.StartNew с помощью предопределенного объекта.
    Anonymous » » в форуме C#
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Разное поведение между Factory.StartNew и Task.Run?
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Разница в производительности между ThreadPool.QueueUserWorkItem и Task.Factory.StartNew
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Многопоточный Task.factory.startnew
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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