Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用异步方法_C#_Async Await - Fatal编程技术网

C# 调用异步方法

C# 调用异步方法,c#,async-await,C#,Async Await,我不熟悉使用异步方法,需要一些帮助。Winforms.Net 4.5程序:ReadInputFile循环通过csv文件中的每一行,并调用异步方法UpdatePOS\u Monitor,该方法将发布到API。到目前为止一切正常(我的数据库正在获取新行),但我不知道在ReadInputFile完成后如何退出应用程序,因为它正在调用异步方法。或者ReadInputFile是否会通过此设置超越自身?我猜我需要在某处“等待”,但不知道该怎么办?多谢各位 private void ReadInput

我不熟悉使用异步方法,需要一些帮助。Winforms.Net 4.5程序:ReadInputFile循环通过csv文件中的每一行,并调用异步方法UpdatePOS\u Monitor,该方法将发布到API。到目前为止一切正常(我的数据库正在获取新行),但我不知道在ReadInputFile完成后如何退出应用程序,因为它正在调用异步方法。或者ReadInputFile是否会通过此设置超越自身?我猜我需要在某处“等待”,但不知道该怎么办?多谢各位

    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
中的删除(几乎总是一个坏主意,吞下这样的异常)