C# 异步似乎是同步的
我不确定我是否遗漏了一些东西,但更多的for循环似乎是同步执行的,尽管我在等待它之外的所有任务 下面是我的代码: 静态环[]args{ var t=启动; } 公共静态异步任务C# 异步似乎是同步的,c#,asynchronous,async-await,C#,Asynchronous,Async Await,我不确定我是否遗漏了一些东西,但更多的for循环似乎是同步执行的,尽管我在等待它之外的所有任务 下面是我的代码: 静态环[]args{ var t=启动; } 公共静态异步任务启动{ var listOfTasks=新列表; 对于var i=0;i这是一个同步任务 listOfTasks.Add(process.Process(i)); process.Process(i); 您只是将项目添加到列表中 这也是一项同步任务 listOfTasks.Add(process.Process(i))
- >>启动{
var listOfTasks=新列表
对于var i=0;i这是一个同步任务
listOfTasks.Add(process.Process(i));
process.Process(i);
您只是将项目添加到列表中
这也是一项同步任务
listOfTasks.Add(process.Process(i));
process.Process(i);
上述函数返回的任务是异步的,它将在代码的whenAll调用中异步执行
请记住,当所有任务都将等待所有任务运行时,如果任务很琐碎,因为它们会一个接一个地启动,那么大多数情况下,它们都会碰巧按顺序运行
如果执行的任务代码根据输入在执行时间上有所不同,您将看到一些差异。第一个异步并不意味着多线程,异步用于在不阻塞UI的情况下运行后台任务,或者在不阻塞主线程的情况下运行I/O操作。 通常操作系统通过多线程处理异步,但不能保证。 如果要启动多个线程,请使用Thread.start 无论如何,在您的代码中,您强制代码同步运行,因为您在Main方法中调用异步方法start而不等待 您需要将代码更改为:
static async void Main(string[] args)
{
var t = await Start();
}
或者不等待,但计划风险在任务完成前终止:
static void Main(string[] args)
{
Task.Run(async () => {
var t = await Start();
});
}
循环是同步的。循环添加到列表中的任务是异步的。您必须等待启动并将Main设置为异步的。请解释为什么您认为它是同步的,您观察到的与您预期的不同之处,当然,还要解释您预期会发生什么。您是否也可以显示过程中的代码。过程s?如果该代码本质上不是异步的,那么问题中的代码做什么并不重要。@LasseV.Karlsen-在控制台窗口中,它按顺序输出taskId,例如1,2,3,4,5,6。如果它运行异步,我希望在某个点上顺序会有所不同?该流程方法中没有异步代码,这就是原因。有没有即使您添加了任务和异步关键字,一切仍然是同步的。不要将其粘贴在此处。编辑您的问题。@键盘实际上,如果不在Main中等待任务,他就有可能在所有任务完成之前终止进程。但这不会改变正在调用的代码的异步性质。如果该代码确实是异步的,不管Main的结构如何,它仍然是异步的。他应该根据您的建议修复代码,但这并不能解释为什么他的其余代码是同步的。