第一次在這裏問一個問題,我會盡量做到儘可能具體。不能得到Task.Result返回字符串,除非我添加一個Thread.Sleep
我正在使用基於Web的Api工作,我很難得到任務以返回結果。
我有一個貿易類這樣與一個買方法和一個GetOrderNumber方法。在我的MainForm中,我使用任務來執行交易,然後檢索與該交易相關的訂單號。
NewTrade Test = new NewTrade();
Task<string> tmp = Task.Factory.StartNew(() => Test.Buy("JPM.NY", 100, 59.50));
string reqid = tmp.Result;
Task<string> tmp2 = Task.Factory.StartNew(() => Test.GetOrderNumber(reqid));
Console.WriteLine(tmp2.Result);
第一個任務返回一個REQID號碼。第二項任務使用REQID號碼並返回交易放置的實際訂單編號。
我遇到的問題是我從第一個任務獲得ReqID號碼,但是我在第二個任務中返回空白。
但是,如果我在第一個和第二個任務之間添加一個Thread.sleep(),我會得到訂單號。
我使用任務因爲最終會有數百個訂單被放置,所以每個訂單都有訂單號碼至關重要。
class NewTrade
{
public string Buy(string stkName, int stkShares, double limitPrice)
{
try
{
using (MyWebClient client = new MyWebClient())
{
Stream data = client.OpenRead("http://localhost:8080/ExecuteOrder?symbol=" + stkName + "&limitprice=" + limitPrice + "&ordername=ARCA%20Buy%20ARCX%20Limit%20DAY&shares=" + stkShares);
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
s = getBetween(s, "<Content>", "</Content>"); //this is a util function to parse the result
// MessageBox.Show(s.ToString());
data.Close();
reader.Close();
return s;
}
}
catch (WebException e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
return "Nothing";
}
}
public string GetOrderNumber(string id)
{
string s = "";
using (MyWebClient client = new MyWebClient())
{
try
{
WebRequest request = WebRequest.Create("http://localhost:8080/GetOrderNumber?requestid=" + id);
WebResponse response = request.GetResponse();
var reader = new StreamReader(response.GetResponseStream());
s = reader.ReadToEnd();
Console.WriteLine(s);
return s;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return "";
}
}
}
}
@Valmorgal然後[編輯你的問題](http://stackoverflow.com/posts/26226337/edit)並使其顯示。還可以使用@ not - 讓您正在與之交談的用戶發表意見。請提出您的問題的[SSCCE](http://sscce.org/),我們可以複製代碼並自行運行以查看它發生的情況是最好的(您可以在沒有WebClient調用的情況下複製問題嗎?) – 2014-10-06 23:27:10
@ScottChamberlain會做。 – Valmorgal 2014-10-06 23:28:15
@ScottChamberlain我一直在嘗試各種各樣的事情,因爲OrderNumber方法現在正在使用webrequest從本地Web服務器獲取響應,並且它是同一個問題。我也使用過WebClient,也是同樣的問題。 – Valmorgal 2014-10-06 23:35:45