簡體   English   中英

C#Tasks獲取結果或捕獲異常

[英]C# Tasks get result or catch exception

我有:

public static async Task<string> httpRequest(HttpWebRequest request)

我想這樣做:

string rez1;
static void test()
    {
        Task.Factory.StartNew(() => { 
            //How can I get result like rez1= httpRequest((HttpWebRequest)HttpWebRequest.Create("google.com")));
            //or catch WebException here.
        });
    }

我該怎么做? 謝謝

你把它混淆了一點。 當您的方法簽名是:

public static async Task<string> httpRequest(HttpWebRequest request)

這意味着“這個方法是異步調用的,我將調用它,它將立即返回並承諾將來完成”。

您應該將方法更改為如下所示:

編輯

根據所做的評論修復了代碼。

public static Task<string> httpRequest(HttpWebRequest request)
{
  return Task.Factory.Startnew(() = > {
      return HttpWebRequest.Create("google.com")
  }
}

當您的方法被標記為異步時,這意味着調用者可能認為它是“純”異步,這意味着沒有線程在后台執行。 如果您確實啟動了一個新線程(正如您在此處所做的那樣,通過使用線程池線程),您應該明確注釋您的方法並告訴您的調用者他將啟動一個新線程。

如果您使用的是.NET 4.5並且可以訪問新的HttpClient類,則可以保存自己啟動新任務。

您可以將方法更改為如下所示:

public static async Task<string> httpRequest(HttpWebRequest request)
{
  var httpClient = new HttpClient();
  var response = await httpClient.GetAsync("http://www.google.com")
  var stringResult = await response.Content.ReadAsStringAsync();

  return stringResult;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM