请问下面这个关于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,这完全是脱裤子放屁