c# - 在具有 longRunning Async main 方法的 ac# 服务中,您应该在服务启动时 .wait ,将任务存储在某处,还是完全忽略它?
问题描述
在我们的许多服务中,OnStart 方法调用了一个 neverEnding 异步任务和 .Wait(),它会执行所有服务工作,直到它被手动关闭。我们做了类似以下的事情(在我来到现场之前就一直这样做)。
MyServiceClass service;
protected override void OnStart(string[] args)
{
eventLog.WriteEntry("MyService service is starting up.");
service = new MyServiceClass(this.ServiceName);
}
...
public class MyServiceClass
{
public MyServiceClass() {
Task.Run(() => DoServiceWork()).Wait();
}
public async Task DoServiceWork() {
while (true)
{
await Task.Delay(1000);//pretend this is actual work being done
}
}
}
有什么理由不只是存储任务并继续前进吗?(假设 main 方法有适当的异常处理)
public class MyServiceClass
{
public Task taskToBeAwaitedOnServiceStop;
public MyServiceClass() {
taskToBeAwaitedOnServiceStop = Task.Run(() => DoServiceWork());
}
}
或者只是完全忽略任务
public class MyServiceClass
{
public MyServiceClass() {
_ = DoServiceWork();
}
}
我正在考虑这些选项,因为我们不喜欢 .waits 浮动(并且更少意味着我们去狩猎时检查的更少)。我在这里要求确定我的替代方案如果实施不会导致奇怪的服务逻辑。
我希望这不是一个太愚蠢的问题,感谢您的帮助:)
解决方案
推荐阅读
- flutter - Flutter 服务器端事件,反应式 UI
- c# - SonarScanner for MsBuild 是否尊重 web.config?
- css - 如何访问在 Vue + Buefy 的作用域样式块中创建的 CSS 变量
- r - 如何使用 pivot_longer 将面板/纵向调查数据从宽格式重塑为长格式
- excel - 如何在 Excel 中将特定分钟值四舍五入到十进制小时?
- reactjs - 是否可以将 Material UI 库与 React Native 一起使用?
- reactjs - 按过滤器数组过滤对象数组
- javascript - jQuery 显示/隐藏不会为元素保留可用空间
- angular - 如何使用授权代码处理 redirect_uri
- php - 如何删除数组中的第一个单词