C# 调用异步方法
我不熟悉使用异步方法,需要一些帮助。Winforms.Net 4.5程序:ReadInputFile循环通过csv文件中的每一行,并调用异步方法UpdatePOS\u Monitor,该方法将发布到API。到目前为止一切正常(我的数据库正在获取新行),但我不知道在ReadInputFile完成后如何退出应用程序,因为它正在调用异步方法。或者ReadInputFile是否会通过此设置超越自身?我猜我需要在某处“等待”,但不知道该怎么办?多谢各位C# 调用异步方法,c#,async-await,C#,Async Await,我不熟悉使用异步方法,需要一些帮助。Winforms.Net 4.5程序:ReadInputFile循环通过csv文件中的每一行,并调用异步方法UpdatePOS\u Monitor,该方法将发布到API。到目前为止一切正常(我的数据库正在获取新行),但我不知道在ReadInputFile完成后如何退出应用程序,因为它正在调用异步方法。或者ReadInputFile是否会通过此设置超越自身?我猜我需要在某处“等待”,但不知道该怎么办?多谢各位 private void ReadInput
private void ReadInputFile()
{
var reader = new StreamReader(File.OpenRead(FilePath + @"\" + FileNameAdd));
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
var Newline = new RevenueLine();
Newline.ClubID = values[0];
Newline.Date = values[1];
Newline.Department = values[2];
Newline.Description = values[3];
Newline.Chits = Convert.ToInt32(values[4]);
Newline.Sales = values[5];
UpdatePOS_Monitor(Newline);
}
}
private async void UpdatePOS_Monitor(RevenueLine line)
{
HttpClient client = new HttpClient();
try
{
string json = JsonConvert.SerializeObject(line);
HttpResponseMessage wcfResponse = await client.PostAsync(API_Address, new StringContent(json, Encoding.UTF8, "application/json"));
}
catch
{
}
}
如果使用的是
async/await
,则整个方法链必须是async
,一直到根(例如,到UI控件事件处理程序)。在您的情况下,这意味着ReadInputFile
必须是async
,而UpdatePOS\u Monitor
必须是async Task
而不是async void
:
// root event handler
private async void button_Click(object s, EventArgs e)
{
await ReadInputFile();
}
private async Task ReadInputFile()
{
var reader = new StreamReader(File.OpenRead(FilePath + @"\" + FileNameAdd));
while (!reader.EndOfStream)
{
var line = await reader.ReadLineAsync();
var values = line.Split(',');
var Newline = new RevenueLine();
Newline.ClubID = values[0];
Newline.Date = values[1];
Newline.Department = values[2];
Newline.Description = values[3];
Newline.Chits = Convert.ToInt32(values[4]);
Newline.Sales = values[5];
await UpdatePOS_Monitor(Newline);
}
}
private async Task UpdatePOS_Monitor(RevenueLine line)
{
using (HttpClient client = new HttpClient())
{
string json = JsonConvert.SerializeObject(line);
HttpResponseMessage wcfResponse = await client.PostAsync(API_Address, new StringContent(json, Encoding.UTF8, "application/json"));
}
}
另请注意wait reader.readlinesync
,wait UpdatePOS\u Monitor(Newline)
,以及catch{}
在UpdatePOS\u Monitor
中的删除(几乎总是一个坏主意,吞下这样的异常)