已回答 多线程和异步编程一起

etl2016

活跃的成员
已加入
2016年6月29日
留言内容
39
编程经验
3-5
你好

据我了解,多线程用于通过拆分CPU绑定的工作负载来充分发挥计算机的处理能力的潜力。并且,异步编程是为了充分利用时钟时间来同时执行独立的任务。是的,尝试将这两个功能集成在一起以解决大规模数据处理的场景,在这两种功能都很有用的情况下。但是,没有找到关于此方法的许多最佳实践(可能是,首先不建议使用此方法-因此,请提供反馈-谢谢)

下面的代码设置引发对象引用错误:此设计方法是否正确,如果正确,请提出修复错误的方法,谢谢。

C#:
using System;
using System.Threading;
using System.Threading.Tasks;

namespace threadAsync
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("MAIN : Hello World!");
            Calling_method_async();

        }
        private async void Calling_method_async()
        {
            var th = new Thread(async () => await Called_method_async());
            th.Start();
                      
        }
        public async Task<int> Called_method_async()
        {
            await Task.Delay(4);
            return 42;
        }
    }
}
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
问题在于主线程在线程主体的lambda之前终止,任务可以完成。

您上面的代码等效于:

C#:
using System;
using System.Threading;
using System.Threading.Tasks;

namespace threadAsync
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("MAIN : Hello World!");
            var th = new Thread(async () => await Called_method_async());
            th.Start();
        }

        public async Task<int> Called_method_async()
        {
            await Task.Delay(4);
            return 42;
        }
    }
}

Notice how the Main() terminates right after starting a thread.
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
据我了解,多线程用于通过拆分CPU绑定的工作负载来充分发挥计算机的处理能力的潜力。并且,异步编程是为了充分利用时钟时间来同时执行独立的任务。
我希望能找到一篇关于两种不同类型异步的较旧的博客文章,但是,现在这同样有用:
 
最佳 底部