create_task 调用 ref class 密封构造函数给出 'create_task':未找到匹配的重载函数

create_task that calls ref class sealed constructor gives 'create_task': no matching overloaded function found

我已经创建调用 MyClass 的构造函数,My class 定义为 ref class Myclass sealed 并且此函数在 public 下定义为静态

IAsyncOperation<MyClass^>^ MyNameSpace::MyClass::CreateAsync()
{
    return create_task(MyClass()).then([](MyClass^ objectx)
    {
        return ref new MyClass();
        //return std::make_shared<MyClass>();
    });
}

这给我带来了一堆错误,例如:

Error   C2672   'Concurrency::details::declval': no matching overloaded function found

Error   C2770   invalid explicit template argument(s) for '_Ty &&Concurrency::details::declval(void)'

Error   C2672   'Concurrency::details::_FilterValidTaskType': no matching overloaded function found

Error   C2672   'create_task': no matching overloaded function found

您的构造函数不是异步操作,因此不能用作 create_task 的参数。如果需要很长时间并且您想 运行 构造函数作为任务,请改用 create_async

create_async takes a function-like object (eg a lambda) and runs it as a task.

从你上面的例子:

IAsyncOperation<MyClass^>^ MyNameSpace::MyClass::CreateAsync()
{
    return concurrency::create_async([]
    {
        return ref new MyClass();
    });
}

这会将任务启动到 运行 lambda(它构造您的 class),然后将其包装在您可以使用的 WinRT IAsyncOperation<> 中。由于您的构造函数不执行任何操作,因此我不确定您为什么希望它是异步的(除非您省略了一堆昂贵的调用)。