Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在线程内同步运行方法C.net内核_C#_Multithreading_Asp.net Core_.net Core_Asp.net Core 3.1 - Fatal编程技术网

C# 在线程内同步运行方法C.net内核

C# 在线程内同步运行方法C.net内核,c#,multithreading,asp.net-core,.net-core,asp.net-core-3.1,C#,Multithreading,Asp.net Core,.net Core,Asp.net Core 3.1,我正在我的.net核心控制器中启动一个后台线程,如下所示 var t = new System.Threading.Thread(() => LongRunningTask()) { IsBackground = true }; t.Start(); 那么我的长时间运行方法与此类似 public void LongRunningTask(){ A(); B(); C();

我正在我的.net核心控制器中启动一个后台线程,如下所示

var t = new System.Threading.Thread(() => LongRunningTask()) 
                                         { IsBackground = true };
t.Start();
那么我的长时间运行方法与此类似

public void LongRunningTask(){
    
    A();
    B();
    C();
 }
然而,有时我注意到方法C在方法A结束之前执行。 有没有办法让这些方法一个接一个地执行

还是有更好的方法来运行这个长时间运行的任务而不需要用户等到所有这些完成?

它们在同一个线程上一个接一个地启动,所以在B开始同步之前,A总是会完成,并且不包括任何等待语句,这会导致它在您考虑之前返回。待完成

如果这些方法是异步的,它们应该返回一个任务,您应该等待它们,例如:

var t = new System.Threading.Thread(async () => await LongRunningTask())
{ IsBackground = true };
t.Start();

async Task LongRunningTask()
{
    await A();
    await B();
    await C();
}

您是如何注意到这一点的?除非A、B、C是异步的,否则C不可能在A完成之前开始执行。请提供方法A、B和C的定义。我正在我的.net核心控制器中启动这样一个后台线程-好吧,问题1。您不能从控制器运行线程。NET Core为您提供了极好的工具,使您能够在后台进行操作,而无需求助于过时的模式,如线程。查找IHostedService或BackgroundService。