当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在异步方法中抛出异常(Task.FromException)》经验,为你挑选了1个好方法。

我才发现,原来,因为.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 GetTest1(string filePath)
    {
        if (!Directory.Exists(filePath))
        {
            return Task.FromException(new DirectoryNotFoundException("Invalid directory name."));
        }
        return Task.FromResult(filePath);
    }

    // Using the normal throw keyword
    private Task GetTest2(string filePath)
    {
        if (!Directory.Exists(filePath))
        {
             throw new DirectoryNotFoundException("Invalid directory name.");
        }
        return Task.FromResult(filePath);
    }
}

Stewart_R.. 15

GetTest1()和之间的行为有所不同GetTest2.

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

相反GetTest2(),在调用时立即抛出异常而不返回Task

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



1> Stewart_R..:

GetTest1()和之间的行为有所不同GetTest2.

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

相反GetTest2(),在调用时立即抛出异常而不返回Task

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


@Bidou:因为`await Task.FromException (新的DirectoryNotFoundException("无效的目录名称."));`(`return`将不会编译)只是一种过于冗长的说法`throw new DirectoryNotFoundException("目录名无效.");`
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有