2
我正在使用DropNet API連接到DropBox。儘管如此,我正在爲異步/等待概念而努力。從GetSomethingAsync回調中返回對象
我有一個方法是調用api GetTokenAsync
。返回類型爲void
,並且回調有成功和失敗操作。
public async Task<GetTokenResult> GetAuthorizationUrl()
{
var result = new GetTokenResult();
_dropNetClient.GetTokenAsync(
login =>
{
result.Url = _dropNetClient.BuildAuthorizeUrl(_authorizationCallback.ToString());
result.Success = true;
},
exception =>
{
result.Error = exception.ToDiagnosticString();
result.Success = false;
}
);
return result;
}
問題?我在考慮改變返回類型爲GetTokenResult
可能返回比動作快,因此我的結果永遠不會被設置。我不能await
async方法,因爲它返回void。
這是圍繞異步/等待的一個概念,我無法環繞我的頭。
謝謝喬恩。你能否給我一個使用這個方法和SetException的例子?我不明白,看看你會在哪裏消費這個例外。在這個方法的調用者中,我假設你想等待GetAuthorizationUrl(),它將刪除GetTokenResult並不再是任務。 –
@TimGabrhel:「刪除GetTokenResult並不再是任務」是什麼意思?是的,您將等待'GetAuthorizationUrl' - 但如果您使用'tcs.SetException(exception)'而不是讓您的GetTokenResult具有錯誤/成功屬性,則意味着您可以捕捉異常,或者讓它傳播除此以外。哎呀,你甚至可以改變只使用'任務'作爲唯一的*成功*你返回的信息是一個字符串。 –
我對這個例外的使用感到茫然。你是說你必須在這個方法中使用這個異常嗎?就我而言,我想將異常傳播回UI(WindowsPhone),以便我可以允許用戶通過電子郵件發送包含異常詳細信息的錯誤報告。因爲我想傳播,所以如果由於await關鍵字而導致調用方的實際返回類型是GetTokenResult,那麼我錯過了如何返回異常詳細信息的概念。 –