我有一個代碼可以從資料庫中獲取所有商品價格,然后進行 API 呼叫來更新它們。
出于某種原因,我的 Button1_click 函式內部的回圈不起作用,但沒有 Button2_click 回圈的類似代碼也能正常作業。我不明白為什么。
我可以在輸出中看到 API 呼叫的結果。似乎呼叫了 API,但價格從未更新。
這是我第一次處理異步函式和任務,所以我是新手。
protected async void Button1_Click(object sender, EventArgs e)
{
dt = DB_GetItemPrice();
for (int i = 0; i < dt.Rows.Count; i )
{
var task = SendRequestAsync(dt.Rows[i]);
var items = await task;
Debug.WriteLine(task.Result);
}
}
protected async void Button2_Click(object sender, EventArgs e)
{
dt = DB_GetItemPrice();
var dr = dt.Rows[0];
var task = SendRequestAsync(dr);
var items = await task;
Debug.WriteLine(task.Result);
}
protected DataTable DB_GetItemPrice()
{
var db = PSystem.DataHelp.Database.Application;
var con = new DbConnection(db, ConnectionState.Open);
var st =
"SELECT * "
"FROM item_discount ";
var cmd = new PSystem.DataHelp.DbCommand(st, con);
using (var reader = cmd.ExecuteReader())
{
var dt = PSystem.DataHelp.DbManager.GetDataTable(reader);
if (dt == null || dt.Rows.Count < 1)
return null;
return dt;
}
}
private async Task<string> SendRequestAsync(DataRow dr)
{
string APICall;
string OrderID = ((long)dr["OrderID"]).ToString();
string GoodsID = ((long)dr["GoodsID"]).ToString();
string NewPrice = ((long)dr["NewPrice"]).ToString();
Debug.WriteLine(OrderID " ," GoodsID " ," NewPrice);
APICall = "myAPIAdress?" "&Param0=" GoodsID "," 3 "," NewPrice "," 1 "," OrderID ",,";
using (var wc = new System.Net.WebClient())
{
var Message = await wc.DownloadStringTaskAsync(APICall).ConfigureAwait(false);
return Message;
}
}
uj5u.com熱心網友回復:
發現我的原始代碼運行良好。
可能我嘗試請求的 API 有某種速率限制等。當我在使用 的每個任務之間進行第二次延遲時await Task.Delay(1000),它作業正常。
uj5u.com熱心網友回復:
我認為你的問題在于ConfigureAwait(false)你的SendRequestAsync方法。
嘗試洗掉它。您不應ConfigureAwait(false)在 UI 同步背景關系中使用。
閱讀此處了解詳情
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366423.html
上一篇:多次使用導航屬性C#EFCore
