Задать вопрос
Slavka_online
@Slavka_online
Интересная личность

Разработка своих асинхронных функций, какой шаблон верный?

public Task<int> Foo()
    {
        var tcs = new TaskCompletionSource<int>();
        Task.Run(() => {
            var result = SomeAction();
            tcs.SetResult(result);
        });
        return tcs.Task;
    }


Никак не могу понять, какую пользу здесь играет класс TaskCompletionSource, почему писать return Task.Run(...) считается дурным тоном?
  • Вопрос задан
  • 473 просмотра
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Software-testing.ru
    Программирование на C# для тестировщиков
    10 недель
    Далее
Пригласить эксперта
Ответы на вопрос 2
tomnolane
@tomnolane
профессиональный разработчик
всегда пользуюсь так:
//для метода, который ничего не возвращает
public async Task Blabla()
{
    await Task.Run(()=>{

     //тут я что-то выполняю

     });
}

//для метода, который возвращает тип string (для примера)
public async Task<string> Blabla()
{
    return await Task.Run(()=>{

     return "я возвращаюсь!!!";

     });
}

и всё.

просто. работает. читабельно.

upd.
Петр - мэрси, напомнили)

upd2
Славка: вот тут ответ на то, где TaskCompletionSource применяется на практике
Ответ написан
petermzg
@petermzg
Самый лучший программист
В вашем примере TaskCompletionSource точно лишний.
Достаточно:
public Task<int> Foo()
{
        return Task.Run(() => {
            return SomeAction();
        });
    }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы