如何将 "StartService" Task 与 ThreadStart 一起使用?

How do I use "StartService" Task with ThreadStart?

如何将“StartService”任务与 ThreadStart 一起使用? 可能吗?

public partial class MyService : ServiceBase
{
    public MyService()
    {
        InitializeComponent();

        LocalInit();
    }

    internal void LocalInit()
    {
        //place here any local checks 
    }


    protected override void OnStart(string[] args)
    {
        if (Something.ConfigOK())
        {
            ThreadStart threadDelegate = Something.StartService; // Expected a method with void StartService signature
            var newThread = new Thread(threadDelegate);
            newThread.Start();
        }
        else
        {
            //log error
            throw new Exception("MyService : Config failed");
        }
    }
}



public static partial class Something
{
    public static async Task StartService()
    {
        await DoJob();
    }
}

错误

Error CS0407 'Task Something.StartService()' has the wrong return type

Expected a method with void StartService signature

有可能,但我建议您选择 Background tasks with hosted services。 这是一些 implementation

或使用hangfire队列。

正如我所提到的,这是一个建议,而不是对您问题的回答。

你试过吗?

protected override void OnStart(string[] args)
{
    if (Something.ConfigOK())
    {
        Something.StartService();
    }
    else
    {
        //log error
        throw new Exception("MyService : Config failed");
    }
}

如果DoJob os真正异步或者:

protected override void OnStart(string[] args)
{
    if (Something.ConfigOK())
    {
        Task.Run(Something.StartService);
    }
    else
    {
        //log error
        throw new Exception("MyService : Config failed");
    }
}

如果不是(阻塞)。

无需显式创建线程。

注意异常处理!

但是,既然你提到了 ASP.NET 核心 (???),我建议使用 Worker template