concurrency::task
— это класс-шаблон, поэтому concurrency::task<int>
и concurrency::task<void>
— это два разных класса. Экземпляры одного из них не могут быть разыграны или преобразованы в другой.
Поэтому ваш подход в чем-то правильный. Однако вы не конвертируете, вы просто создаете новый экземпляр task<void>
, который будет выполняться task<int>
, возвращенным Method2()
, после того, как это будет сделано. Это немного скрывает то, что вы на самом деле пытаетесь сделать, и может затруднить поддержку кода в будущем. Я бы подумал, что лучший подход - создать и вернуть task<void>
, который инкапсулирует Method2()
и ожидает его завершения:
concurrency::task<void> MyFunction1()
{
return concurrency::task<void>{[]()
{
MyFunction2().wait();
}};
}
Это немного более прямолинейно и чисто, особенно потому, что task<void>
, которое получает вызывающий, фактически выполняет то, что выполняет MyFunction2()
.
В любом случае, поскольку типы несовместимы, невозможно создать новый экземпляр task<void>
.
person
Max Vollmer
schedule
31.03.2018
.then
? - person Drise   schedule 30.03.2018concurrency::task
- person Igor Tandetnik   schedule 30.03.2018