C++ 转换任务<;T>;任务<;无效>;
是否有一种方法可以简化以下代码以避免C++ 转换任务<;T>;任务<;无效>;,c++,visual-c++,ppl,C++,Visual C++,Ppl,是否有一种方法可以简化以下代码以避免。然后调用将我的任务转换为任务 我无法更改MyClass::MyFunction1的函数签名,因为它是公共API的一部分 task<void> MyClass::MyFunction1() { return MyFunction2().then([](int) {}); } task<int> MyClass::MyFunction2() { // Some code here } 任务MyClass::MyFunc
。然后
调用将我的任务
转换为任务
我无法更改MyClass::MyFunction1
的函数签名,因为它是公共API的一部分
task<void> MyClass::MyFunction1()
{
return MyFunction2().then([](int) {});
}
task<int> MyClass::MyFunction2()
{
// Some code here
}
任务MyClass::MyFunction1()
{
返回MyFunction2()。然后([](int){});
}
任务MyClass::MyFunction2()
{
//这里有一些代码
}
concurrency::task
是一个模板类,因此concurrency::task
和concurrency::task
是两个不同的类。其中一个的实例无法强制转换或转换为另一个
因此,你的方法有些正确。但是,您不是在转换,您只是在创建一个新的任务
实例,该实例将在完成后由Method2()
返回的任务
执行。这隐藏了一点您实际想要做的事情,并且可能会使将来维护代码变得更加困难。我认为更好的方法是创建并返回一个task
,它封装了Method2()
,并等待它完成:
concurrency::task<void> MyFunction1()
{
return concurrency::task<void>{[]()
{
MyFunction2().wait();
}};
}
并发::任务MyFunction1()
{
返回并发::任务{[]()
{
MyFunction2().wait();
}};
}
这有点直截了当和清晰,特别是因为调用方接收的任务实际上执行了MyFunction2()
正在执行的任何内容
无论哪种方式,由于类型不兼容,因此无法创建新的任务
实例。什么是。然后
?@Drise并发::任务的成员函数