看来我无法在异步方法中引发异常:
void Start ()
{
ReadAndThrow(null);
}
public static async Task ReadAndThrow(string path)
{
if(string.IsNullOrEmpty(path) == true)
{
Debug.Log("Wrong");
throw new Exception("Wrong");
}
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
{
string line = null;
while ((line = await reader.ReadLineAsync()) != null) { }
}
}
}
有了这个,我可以看到调试了,但是异常不会在控制台中显示。它确实会停止应用程序,基本上会发生异常,但不会在控制台中显示。
我可以使用try catch并打印错误,但是为什么控制台中会忽略该异常?它没有显示在错误部分,我检查是否会从那里错过它。
如何获取要打印的例外?
编辑:
最新使用的代码,不打印:
async Task Start()
{
await ReadAndThrow(null);
}
async Task ReadAndThrow(string path)
{
Debug.Log("Start");
try
{
if (string.IsNullOrEmpty(path) == true) { Debug.Log("Wrong"); throw new Exception("Wrong in"); }
}catch(Exception e)
{
Debug.Log("Method" + e.Message);
throw;
}
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
{
string line = null;
while ((line = await reader.ReadLineAsync()) != null)
{
}
}
}
}
答案 0 :(得分:3)
ReadAndThrow
将在打印异常之前完成。需要awai
了。
答案 1 :(得分:0)
您需要通过修改await
方法的签名来Start()
方法
async Task Start()
{
await ReadAndThrow(null);
}
答案 2 :(得分:0)
需要修复才能使其正常运行。魔术是您需要等待ReadAndThrow完成。我也建议阅读https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/
public Task StartAsync ()
{
return ReadAndThrow(null); //and await StartAsync method
//or
await ReadAndThrow(); // do not forget to make method async
}