我的代码看起来是这样的为什么async等待抛出NullReferenceException?
var userStartTask = LroMdmApiService.AddUser(user);
// .... do some stuff
await userStartTask;
当AddUser()
抛出一个异常,它冒泡为NullReferenceException
。它不等待等待。
但是,如果我构建这样的代码...
var result = await LroMdmApiService.AddUser(user);
然后异常得到正确捕获。有人能告诉我这里发生了什么事吗?
下面是显示问题的完整代码。这种情况的最佳做法是什么?
class Program
{
private static void Main(string[] args)
{
CallAsync();
Console.ReadKey();
}
public static async void CallAsync()
{
var task = CallExceptionAsync();
ThrowException("Outside");
await task;
}
public static Task CallExceptionAsync()
{
return Task.Run(() =>
{
ThrowException("Inside");
});
}
public static void ThrowException(string msg)
{
throw new Exception(msg);
}
}
请提供一个简短但完整的例子来说明问题。只用这么多的代码很难帮助你。 –
将userStartTask视为一个包含的方法,包含在您尝试分离的任务中。如果任务无法通过“var result”在方法内部返回,那么它必须返回到方法层。这意味着异常不包含在“var result”中,而是抛出在方法层。 –
@JohnPeters,我在这里跟随微软的例子:https://msdn.microsoft.com/en-us/library/hh696703.aspx – Anish