C# Task.Run 开启新线程,同步、异步的写法的问题

C# Task.Run开启新线程,同步、异步的写法的问题

请问下面这个关于Task.Run async await的代码,假设MyFunction定时触发,在实现新线程处理MyFunction()的时候,是不是可以让 MyFunction() 在新的线程上按照先后顺序排队执行?
就是说,是不是整体上来看,MyFunction() 对于主线程是异步,然后 第一次触发的 MyFunction() 和 第二次触发的 Function() 是同步的?

Task.Run(async () =>
{
    await Task.Factory.StartNew(() =>
    {
        MyFunction();
    });
});

然后
Task.Run 和 Task.Factory.StartNew 在基础功能上是差不多的吧,只是版本不同的写法不同?

最后想问一下各位专家,
如果去掉这个 Task(async() => await ...
直接变成

Task.Run(() =>
{
   MyFunction();
});

是不是 MyFunction() 对于主线程还是异步的,但是循环执行 MyFunction(),MyFunction() 自己的执行就是顺序不一定了?

通过打印信息就知道了,比如:

using System;
using System.Threading;
using System.Threading.Tasks;

namespace asyncTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Test2();
            Console.ReadLine();
        }

        static void MyFunction()
        {
            Thread.Sleep(10000);
            Console.WriteLine("休息了10秒后,打印MyFunction()...");
        }

        public static void Test1()
        {
            Task.Run(async () =>
            {
                await Task.Factory.StartNew(() =>
                {
                    MyFunction();
                    Console.WriteLine("在调用MyFunction()后打印这一行!");
                });
                Console.WriteLine("在调用await启动任务后打印这一行!");
            });
        }

        public static void Test2()
        {
            Task.Run(() =>
            {
                MyFunction();
                Console.WriteLine("在调用MyFunction()后打印这一行!");
            });
        }
    }
}


你仔细看task.run的说明,它背后依托的是线程池
既然是线程池,那就不存在先放入必然先执行的问题
此外,async 参数可以不加,嵌套也没有什么意义,不过是线程里又开线程
你开了个线程1,然后线程1里启动线程2,再等待线程2执行完,然后退出线程1,这完全是脱裤子放屁