如何以编程方式将IAsyncOperation强制为错误状态?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以编程方式将IAsyncOperation强制为错误状态?相关的知识,希望对你有一定的参考价值。

我有一些C ++ / WinRT代码,它们异步返回一个字符串。但是,某些内部操作可能会失败,并且当发生这种情况时,我需要使IAsyncOperation也移至错误状态。 co_return显然将操作移至完成状态;如何将操作移至错误状态?精简的代码如下:

winrt::IAsyncOperation<winrt::hstring> MyClass::DoAuthenticationAsync()
{
    auto acctProvider = co_await winrt::WebAuthenticationCoreManager::FindAccountProviderAsync(AccountProviderId, authority, user);
    auto webToken = winrt::WebTokenRequest(acctProvider, CarbonScope, CarbonClientId, winrt::WebTokenRequestPromptType::Default);

    webToken.Properties().Insert(L"authority", authority);
    webToken.Properties().Insert(L"resource", resource);

    auto requestResult = co_await winrt::WebAuthenticationCoreManager::GetTokenSilentlyAsync(webToken);

    auto requestStatus = requestResult.ResponseStatus();
    if (requestStatus == winrt::WebTokenRequestStatus::Success)
    {
        co_return requestResult.ResponseData().GetAt(0).Token();
    }
    else if (requestStatus == winrt::WebTokenRequestStatus::UserInteractionRequired)
    {
        auto uxresult = co_await winrt::WebAuthenticationCoreManager::RequestTokenAsync(webToken);

        requestStatus = uxresult.ResponseStatus();
        if (requestStatus == winrt::WebTokenRequestStatus::Success)
        {
            co_return uxresult.ResponseData().GetAt(0).Token();
        }
    }
    if (requestStatus == winrt::WebTokenRequestStatus::ProviderError)
    {
        // here I'd like to have the IAsyncOperation have an Error status with the ErrorCode from the requestResult.
        auto err = requestResult.ResponseError().ErrorCode();
    }
    co_return L"";
}
答案

您必须抛出winrt::xxxstd::xxx异常。这将在协程边界处捕获,并通过ABI返回到调用语言投影,该投影通常会抛出异常。这是专门为跨语言工作而设计的。

以上是关于如何以编程方式将IAsyncOperation强制为错误状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式强制 EGORefreshTableHeaderView 更新

如何以编程方式强制 log4net 释放日志文件以便可以访问它?

如何以编程方式强制停止我的 android 应用程序?

如何以编程方式强制在 UISearchBar 中进行搜索?

在遇到用户创建的错误后,如何以编程方式强制编译器停止编译过程?

如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?