gpt4 book ai didi

c# - 如何在异步方法中抛出异常 (Task.FromException)

转载 作者:太空狗 更新时间:2023-10-29 17:47:43 30 4
gpt4 key购买 nike

我刚刚发现,自 .NET 4.6 以来,有一个新方法 FromExceptionTask 对象上,我想知道在 async 方法中抛出异常的最佳方式是什么。

这里有两个例子:

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);
}
}

最佳答案

GetTest1() 之间的行为存在差异和 GetTest2 .

GetTest1()调用方法时不会抛出异常。相反,它返回 Task<string> .在等待该任务之前不会抛出异常(我们也可以选择检查任务以查看是否成功而不抛出异常)。

对比GetTest2()调用时立即抛出异常而不返回 Task<string>

我想您使用哪一个取决于所需的行为。如果我有一堆 GetTest()我想并行运行的任务,我希望继续执行那些成功的任务,然后我会使用 Task.FromException这使我可以检查每个任务的结果并采取相应的行动。相反,如果列表中的任何异常意味着我不想继续执行,我可能会抛出异常。

关于c# - 如何在异步方法中抛出异常 (Task.FromException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41736312/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com