小编use*_*595的帖子

async/await异常处理模式

我的代码中有以下重复出现的try/catch模式.使用try/catch块来处理在orionProxy中调用方法时抛出的任何异常.

async private void doGetContacts()
{
    try {
        currentContacts = await orionProxy.GetContacts (); // call method in orionProxy
        ShowContacts (); // do something after task is complete
    }
    catch (Exception e) {
        orionProxy.HandleException (e); // handle thrown exception
    }
}
Run Code Online (Sandbox Code Playgroud)

我想写的是以下内容.

async private void doGetContacts()
{
    currentContacts = await orionProxy.CheckForException(orionProxy.GetContacts ());
    ShowContacts (); // do something after task is complete but shouldn't run on exception
}
Run Code Online (Sandbox Code Playgroud)

任何指针/建议?我尝试过各种形式的Actions/Tasks/Lambdas,但是没有什么能在orionProxy.CheckForException(?)中正确捕获异常,因此ShowContacts不会运行.

.net c# async-await

31
推荐指数
1
解决办法
2万
查看次数

Task.Factory.FromAsync与End方法中的"out"参数

如何使用Task.Factory.FromAsync工厂为通过"out"参数返回多个值的end方法?

begin方法有这个签名:

public virtual System.IAsyncResult BeginGetCaseStatus(int CaseOID, int ClientOID, System.AsyncCallback @__Callback, object @__UserData)
Run Code Online (Sandbox Code Playgroud)

结束方法是:

public virtual void EndGetCaseStatus(System.IAsyncResult @__AsyncResult, out DTGenericCode[] BasicStatus, out DTGenericCode[] ARStatus)
Run Code Online (Sandbox Code Playgroud)

我可以用一些如何使用:

public Task<?> GetCaseStatusAsync(int CaseOID, int ClientOID)
{
    return Task.Factory.FromAsync  (BeginGetCaseStatus(CaseOID, ClientOID, null, null), EndGetCaseStatus(?, ?));
}
Run Code Online (Sandbox Code Playgroud)

c# async-await

5
推荐指数
2
解决办法
965
查看次数

标签 统计

async-await ×2

c# ×2

.net ×1