如何将 "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。
如何将“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。