Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 转换任务<;T>;任务<;无效>;_C++_Visual C++_Ppl - Fatal编程技术网

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
并发::任务的成员函数