採取以下代碼的結果有什麼用:如果我想返回的WebClient
public async Task<string> AuthenticatedGetData(string url, string token)
{
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(WebClient_DownloadStringCompleted);
client.DownloadStringAsync(new Uri(url + "?oauth_token=" + token));
}
private void WebClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
string response = e.Result;
}
WebClient_DownloadStringCompleted被稱爲...和響應=我要回應......大。完美...
現在考慮如何我調用此方法AuthenticatedGetData:
它正在從一種存儲庫的名爲...的倉庫想要一個字符串,以便它可以序列化和做的東西與由此產生的對象...
因此,一切都從倉庫運行異步...調用authenticatedgetdata,然後發出請求...但因爲下載字符串沒有.Result()法因downloadstringcompleted需要void方法來調用...我不能結果字符串返回到調用庫。
什麼,我必須做的就是client.DownloadStringAsync返回上完成的響應串任何想法?
難道我只是單純地要緊密結合我的數據訪問操作這個特定的應用程序。它似乎很un..re可用:(我真的想繼續我的整個身份驗證的東西全部從什麼會分開發生。我不想不停地重複每個倉庫上面的代碼,因爲這將是爲每個相同反正!
編輯:: //
我創建了一個抽象方法在我的課,與上述要求涉及......然後我用我的倉庫擴展這個類,並實現抽象方法。聽起來不錯?
編輯:根據要求//調用代碼:
public class OrganisationRepository
{
PostRequest postRequest;
public OrganisationRepository()
{
this.postRequest = new PostRequest();
}
public IEnumerable<Organisation> GetAll()
{
string requestUrl = BlaBla.APIURL + "/org/";
string response = postRequest.AuthenticatedGetData(requestUrl, BlaBla.Contract.AccessToken).Result;
}
}
public class PostRequest
{
public Task<string> AuthenticatedGetData(string url, string token)
{
TaskCompletionSource<string> tcs = new TaskCompletionSource<string>();
WebClient client = new WebClient();
client.DownloadStringCompleted += (sender, e) =>
{
if (e.Error != null)
{
tcs.TrySetException(e.Error);
}
else if (e.Cancelled)
{
tcs.TrySetCanceled();
}
else
{
tcs.TrySetResult(e.Result);
}
};
client.DownloadStringAsync(new Uri(url + "?oauth_token=" + token));
return tcs.Task;
}
}
不幸的是,請求只是永遠不會返回/完成...但不會出錯。 – Jimmyt1988
你能顯示呼叫代碼嗎? – Erick
我將它添加到OP中,感謝您的持續幫助!我所做的抽象事情並沒有解決任何問題......我想只是讓存儲庫返回字符串,然後序列化 – Jimmyt1988