|
Заблокирован
|
|
Что TaskCompletionSource<TResult> может такого, чего не может Task<TResult>?04.11.2023, 23:45. Показов 1075. Ответов 6
Что TaskCompletionSource<TResult> может такого, чего не может Task<TResult>?
Те примеры использования TaskCompletionSource<TResult>, что я увидел, как мне показалось, можно было бы реализовать и с помощью Task<TResult>. То есть, с помощью методов Task<TResult>. Например вот: https://learn.microsoft.com/ru... s-manually У Task<TResult> есть методы, позволяющие завершить задачу успешно с неким результатом или с исключением. Почему я не прав? То есть, что TaskCompletionSource<TResult> может такого, чего категорически не может Task<TResult>?
0
|
|
| 04.11.2023, 23:45 | |
|
Ответы с готовыми решениями:
6
Делегат Func с несколькими параметрами в Task<Tresult> Cast<TResult> приведение к заранее неизвестному типу Что может в PHP PHPstorm, чего не может Visual Studio? |
|
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
|
|
| 04.11.2023, 23:58 | |
|
нету смысла использовать
1
|
|
|
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
|
||
| 05.11.2023, 00:14 | ||
|
Task - это awaitable объект. Некая асинхронная операция. TaskCompletionSource - это универсальный сигнальный механизм, на базе которого можно строить различные Task-"комбинаторы", например: 1. Pause/Resume 2. Однократная инициализация в асинхронном API. 3. Всякие Interleaving-реализации. Например, можно взять коллекцию тасок, и ожидать их в хронологическом порядке. Stephen Toub об этом еще в 2012 году писал. Дальше от фантазии зависит.
1
|
||
|
|
||||||
| 05.11.2023, 01:12 | ||||||
Сообщение было отмечено titan4ik как решение
Решение
Есть у вас проприетарная либа работающая либо на event, либо на callback delegate. А код хочеться организовать асинхронный. Вот тут поможет TaskCompletionSource.
2
|
||||||
|
Заблокирован
|
|
| 05.11.2023, 12:19 [ТС] | |
|
А если так вопрос поставить. Как опрос. А вам самим часто TaskCompletionSource<TResult> приходится использовать?
Добавлено через 54 минуты Wolfdp, спасибо! А то примеры, которые я видел были такими, что не было понятно (мне) в чем полезность доп возможностей TaskCompletionSource. Теперь интересно насколько часто практически люди сталкиваются с необходимостью это применять. Это такая полезная интегральная характеристика. То, что называют "средней температурой по больнице". Иногда полезно знать) Есть средства или технологии, которые так или иначе почти постоянно используются, а есть такие, которые используются крайне редко. Соответственно, первые используют почти все. А вторые - оч малый процент программистов Добавлено через 8 минут Я отметил как решение ответ от Wolfdp, потому что в нем увидел практический понятный пример. Но решением также является ответ от IamRain (ответ в общем виде), и ответ от Dr9vik (теперь я понимаю, что это тоже очень полезный для меня ответ).
0
|
|
|
Модератор
|
|||||||
| 05.11.2023, 14:07 | |||||||
|
Пример, который первый в голову пришёл: создание таска для метода SynchronizationContext.Post, чтобы можно было ожидать завершения переданного метода:
1
|
|||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 05.11.2023, 22:54 | |||
|
Пример из личного опыта: реализация асинхронного дуплексного протокола над TCP, где через одно соединение многопоточно отсылаются разные сообщения и принимаются ответы когда-нибудь потом не в том же порядке, в котором сообщения отправлялись (если интересно поиграться, описание давал тут). Абстракция над этим протоколом имеет интерфейс вида Task<TResult> SendMessage(Request), а под капотом — обработка входящих сообщений и TaskCompletionSource для привязки конкретного вызова SendMessage к полученному сообщению по ID сообщения.Подозреваю, что всякие библиотеки для работы с брокерами сообщений вроде RabbitMQ, где обмен сообщениями производится аналогично через одно соединение, используют его же.
2
|
|||
| 05.11.2023, 22:54 | |
|
Помогаю со студенческими работами здесь
7
От чего может может течь холодильник? Может вы сможете исправить ошибку в коде. Никак не пойму, что хочет. До этого все работало. Может случайно что-то стер? Разваливается RAID1 - что можно сделать, и, вообще, из-за чего это может происходит? Надо создать точку доступа на Windows XP или может что-то подобное. Может и ошибаюсь. Научите идиота Мистика? Да не, быть такого не может Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|