當處理使用異步休息調用的數據API(我正在使用RestSharp.Portable)時,處理返回值的最佳方法是什麼?由於異步函數只能返回任務或任務...但調用方無法返回到返回值...... API如何將數據返回給調用方?全球屬性?如何處理異步函數中的返回值
從我目前閱讀的內容看來,回調函數是與響應數據交互的唯一方式?
以下面的方法爲例,以前我沒有使用異步休息庫,並能返回一個值,但將其轉換成使用RestSharp.Portable後,我沒有看到一個方法來返回值:
public async Task<EntityResourceDescriptor> GetEntityDescriptor(string entityType)
{
TaskCompletionSource<EntityResourceDescriptor> tcs = new TaskCompletionSource<EntityResourceDescriptor>();
var req = new RestRequest("/qcbin/rest/domains/{domain}/projects/{project}/customization/entities/{entityType}");
AddDomainAndProject(req);
req.AddParameter("entityType", entityType, ParameterType.UrlSegment);
client.ExecuteAsync<EntityResourceDescriptor>(req, (res) =>
{
if (res.ResponseStatus == ResponseStatus.Error)
{
tcs.TrySetException(res.ErrorException);
}
else
{
tcs.SetResult(res.Data);
}
}
);
return tcs.Task;
}
這裏所有我能做的就是返回任務但是調用者仍然無法獲得響應數據,或者我錯過了明顯的東西?調用者是否可以訂閱在Task.Completed等處被觸發的事件?
我對這個異步概念非常模糊。有沒有寫可移植數據API的例子?
我不明白這個問題。你正在設定任務的結果。這些數據將在任務完成時返回給調用者。 –
不是,因爲該方法在發送client.ExecuteAsync後立即退出。而tcs.Task沒有提供與價值互動的直接方式。當我添加'await'關鍵字(強制在退出之前完成方法執行)時,我開始收到特定於RestSharp.Portable exe的編譯器錯誤,並且對我沒有多大意義。我將閱讀@sstan建議的文章,看看這些錯誤是否有意義。我可能在我的實現中丟失了一些明顯的東西。感謝您的迴應! – Robert