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(...) считается дурным тоном?
  • Вопрос задан
  • 470 просмотров
Пригласить эксперта
Ответы на вопрос 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();
        });
    }
Ответ написан
Ваш ответ на вопрос

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

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