zoukankan      html  css  js  c++  java
  • C#多线程异常处理(五)

    我在从Task捕获异常时遇到问题.运行我更改了代码,问题解决了.我愿意找出以两种方式运行Task.Run中的异常之间的区别:

    在Outside函数中,我无法捕获异常,但在Inside函数中,我可以捕获异常.

    void Outside()
    {
        try
        {
            Task.Run(() =>
            {
                int z = 0;
                int x = 1 / z;
            });
        }
        catch (Exception exception)
        {
            MessageBox.Show("Outside : " + exception.Message);
        }
    }
    
    void Inside()
    {
        Task.Run(() =>
        {
            try
            {
                int z = 0;
                int x = 1 / z;
            }
            catch (Exception exception)
            {
                MessageBox.Show("Inside : "+exception.Message);
            }
        });
    }
    
    解决方案

    运行任务时,它所引发的任何异常都将保留,并在某些等待任务结果或任务完成的情况下重新抛出. >

    Task.Run()返回一个可用于执行此操作的Task对象,因此:

    var task = Task.Run(...)
    
    try
    {
        task.Wait(); // Rethrows any exception(s).
        ...
    

    对于较新版本的C#,您可以使用await而不是Task.Wait():

    try
    {
        await Task.Run(...);
        ...
    

    整整齐齐.


    为完整起见,这是一个可编译的控制台应用程序,演示了await的用法:

    using System;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main()
            {
                test().Wait();
            }
    
            static async Task test()
            {
                try
                {
                    await Task.Run(() => throwsExceptionAfterOneSecond());
                }
    
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
    
            static void throwsExceptionAfterOneSecond()
            {
                Thread.Sleep(1000); // Sleep is for illustration only. 
                throw new InvalidOperationException("Ooops");
            }
        }
    }
  • 相关阅读:
    thinkPHP入门之二
    thinkPHP入门
    斐波那契数列,冒泡排序,选择排序,数组去重
    jquery-懒加载插件
    本地存储之cookie
    javascript的快速排序法
    [luogu2165 AHOI2009] 飞行棋 (枚举)
    [luogu2576 SCOI2010] 幸运数字 (容斥原理)
    [luogu2587 ZJOI2008] 泡泡堂 (贪心)
    [luogu2602 ZJOI2010] 数字计数 (数位dp)
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/15188893.html
Copyright © 2011-2022 走看看