【发布时间】:2018-02-26 07:32:46
【问题描述】:
这可能有一个简单的答案,我只是找不到它,而且我是 C# 新手。
使用 Visual Studio,我编写了一个将文本写入文件的函数异步(使用 async/await,并且不返回任何内容),但它在我的程序快结束时被调用(我正在测试它),所以现在当它到达await 时,程序从我调用函数的地方继续(在我的 Main 末尾附近),而文本正忙于异步写入文件.
我的问题来了,当 Main 结束时,程序完成并退出所有其他异步任务,甚至在任何东西都可以写入文件之前(因为在它实际写入之前必须经过一个完整的过程文件)。我可以让我的 Main sleep 持续一两秒,但我更愿意知道如何等待所有后台异步任务完成后再继续(不在 Main 中使用另一个 await/async)。
我知道你可能在想为什么我不让它同步,因为它在程序的末尾(我正在测试它),但我需要这种方式,并且想知道如何做到这一点.
void Main(string[] args)
{
try
{
throw new Exception("This is an error\n");
}
catch (Exception ex)
{
LogError.ToFile(ex);
}
//need code here to wait for background processes to finish before ending
}
public class LogError
{
static public void ToFile(Exception excep)
{
Task.Run(() => LogErrorToFile(excep));
}
static public async Task LogErrorToFile(Exception excep)
{
//writes to file using await
}
}
谢谢。
【问题讨论】:
标签: c# visual-studio asynchronous