powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не могу понять тут один паттерн с Task
7 сообщений из 7, страница 1 из 1
Не могу понять тут один паттерн с Task
    #40073953
fkfka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сегодня надо было сделать немного рисёрч, на немного экзотичную тему - сдружить Task-овую асинхронность со старым паттерном асинхронного вызова, кто-нибудь из старперов-дотнетчиков наверняка знает - это всякий IAsyncResult/BeginXXX(...)/EndXXX(...). Ну, это ладно, суть, в общем-то не в этом. Я несколько раз сегодня пока в связи с этим гуглил наткнулся на такую вот идиому, суть которой, если выкинуть детали, в таком:

Код: c#
1.
2.
3.
TaskCompletionSource<int> completionSource = new();
completionSource.TrySetResult(42);
var task = completionSource.Task;


То, что оно делает, совершенно понятно. Но чего никак не могу понять, это чем это отличается от просто:

Код: c#
1.
var task = Task.FromResult(42);


И, ладно бы, я это просто случайно увидел у какого-нибудь индуса, но я это сегодня видел местах в трех, вот и весьма заинтересовало.
...
Рейтинг: 0 / 0
Не могу понять тут один паттерн с Task
    #40074099
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkfka,

Ещё есть простое решение:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static Task<int> ReadAsync(this Stream stream,
                                  byte[] buffer, int offset,
                                  int count)
{
    if (stream == null)
       throw new ArgumentNullException("stream");

    return Task<int>.Factory.FromAsync(stream.BeginRead,
                                       stream.EndRead, buffer,
                                       offset, count, null);
}



fkfka
То, что оно делает, совершенно понятно. Но чего никак не могу понять, это чем это отличается от просто:


Ну это переводит состояние таски, асинхронно. На этом в принципе строится стейтмашина.
...
Рейтинг: 0 / 0
Не могу понять тут один паттерн с Task
    #40074177
fkfka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,

У меня задача прямо диаметральная - таск в "старый" асинк. Но, с самой-то задачей все абсолютно понятно, могу сделать и туда и сюда, без вопросов. Меня заинтересовало именно, что тут, в данном примере, надо просто создать "сразу конченный" таск, и зачем, вот, пассажиры создают его таким извилистым способом, как я привел, а не просто через FromResult(...). Может тут есть какое-то тайное знание, которым я не владею.
...
Рейтинг: 0 / 0
Не могу понять тут один паттерн с Task
    #40074202
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkfka,

Через FromResult ты генеришь сразу завершённую таску, ни о каком асинхронном взаимодействии тут речи нет. Используются тогда, когда ты сразу можешь отдать готовый результат.

Если же ты уже начал асинхронное взаимодействие через TCS, то будь добр веди до конца.

Т.е. именно в твоём случае, TCS не нужен, так как отдаёшь результат 100% синхронно, а Task выступает лишь обёрткой для готового результата. В данном случае можно FromResult.
...
Рейтинг: 0 / 0
Не могу понять тут один паттерн с Task
    #40074206
fkfka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt
Через FromResult ты генеришь сразу завершённую таску,

Ну а так, что ( не я) генерю:

fkfka
Код: c#
1.
2.
3.
TaskCompletionSource<int> completionSource = new();
completionSource.TrySetResult(42);
var task = completionSource.Task;


Что там будет в "task? Да та же самая законченная таска, которую я получу через FromResult.
...
Рейтинг: 0 / 0
Не могу понять тут один паттерн с Task
    #40074207
fkfka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt
В данном случае можно FromResult.

Ну так и я о том же.
...
Рейтинг: 0 / 0
Не могу понять тут один паттерн с Task
    #40074208
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkfka
Что там будет в "task? Да та же самая законченная таска, которую я получу через FromResult.


По логике да, но меньше телодвижений.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не могу понять тут один паттерн с Task
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]