Я только что обнаружил, что с .NET 4.6 появился новый метод FromException
на объекте Task
, и мне было интересно, что было лучшим способом отбросить исключения в async
методКак сделать исключение в async-методе (Task.FromException)
Вот два примера:
internal class Program
{
public static void Main(string[] args)
{
MainAsync().Wait();
}
private static async Task MainAsync()
{
try
{
Program p = new Program();
string x = await p.GetTest1(@"C:\temp1");
}
catch (Exception e)
{
// Do something here
}
}
// Using the new FromException method
private Task<string> GetTest1(string filePath)
{
if (!Directory.Exists(filePath))
{
return Task.FromException<string>(new DirectoryNotFoundException("Invalid directory name."));
}
return Task.FromResult(filePath);
}
// Using the normal throw keyword
private Task<string> GetTest2(string filePath)
{
if (!Directory.Exists(filePath))
{
throw new DirectoryNotFoundException("Invalid directory name.");
}
return Task.FromResult(filePath);
}
}
Лучший способ бросить исключения в методе 'async' -' throw'. Однако ни один из ваших примеров не является методом async. –