【问题标题】:Run Methods inside a thread synchronously C# .net core在线程内同步运行方法 C# .net core
【发布时间】:2021-07-17 19:25:49
【问题描述】:

我正在像这样在我的 .net 核心控制器中启动一个后台线程

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

那么我的长时间运行的方法就是这样的

public void LongRunningTask(){
    
    A();
    B();
    C();
 }

但有时我注意到方法 C 在方法 A 结束之前执行。 有没有办法让这些 A B C 方法一个接一个地执行。

或者有没有更好的方法来运行这个长时间运行的任务,而无需用户等待所有这些完成?

【问题讨论】:

  • 您如何注意到这一点?
  • 除非 A、B、C 是异步的,否则 C 不可能在 A 完成之前开始执行。
  • 请提供方法ABC的定义。
  • 我正在像这样在我的 .net 核心控制器中启动一个后台线程——嗯,问题 1。你不从控制器运行线程。 ASP.NET Core 为您提供了出色的工具,允许您在后台执行操作,而无需诉诸诸如 Thread 之类的过时模式。查找IHostedServiceBackgroundService

标签: c# multithreading asp.net-core .net-core asp.net-core-3.1


【解决方案1】:

它们开始在同一个线程上一个接一个,所以A 总是在B 开始之前完成,假设A 是同步的并且不包括任何await 语句这将导致它在您认为它完成之前返回。

如果方法是异步的,它们应该返回一个Task,你应该等待它们,例如:

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

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

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2012-12-23
    • 1970-01-01
    相关资源
    最近更新 更多