gpt4 book ai didi

c# - System.Threading.Task 未在生产环境中启动

转载 作者:行者123 更新时间:2023-11-30 18:20:12 25 4
gpt4 key购买 nike

我有一个正在执行各种任务的 c# Windows 服务。它在我的本地系统上运行完美,但一旦我在我的产品服务器上启动它,它就不会在其上执行特定任务。

这是我的服务结构:

public static void Execute()
{
try
{
// .... some work ....
foreach (DataRow dr in dt.Rows)
{
string cc = dr["ccode"].ToString();
Task objTask = new Task(delegate { RequestForEachCustomer(cc); });
objTask.Start();
}
}
catch (Exception ex)
{
// Logging in DB + Text File
}
}

public static void RequestForEachCustomer(object cc)
{
try
{
// .... some work ....
foreach (DataRow dr in dt.Rows)
{
WriteLog("RequestForEachCustomer - Before Task");
Task objTask = new Task(delegate { RequestProcessing(dr); });
objTask.Start();
WriteLog("RequestForEachCustomer - After Task");
}
}
catch (Exception ex)
{
// Logging in DB + Text File
}
}

public static void RequestProcessing(object dr)
{
try
{
WriteLog("Inside RequestProcessing");
// .... some work ....
}
catch (Exception ex)
{
// Logging in DB + Text File
}
}

现在生产服务器上发生的事情是它记录了 RequestForEachCustomer 中的最后一个条目,即 “RequestForEachCustomer - After Task” 但它没有记录来自RequestProcessing 这意味着任务根本没有开始。无论是数据库还是文本文件都没有异常。

窗口的事件查看器中也没有记录任何事件。该服务还继续工作(如果我在数据库中插入另一条记录,它会立即由​​服务处理,因此服务也不会卡住。它似乎没有处理 RequestProcessing 任务。)

我对此感到困惑,如果有人能指出我所犯的错误,那就太好了。哦,顺便说一句,我忘了提一下,这项服务几天前在服务器上运行良好,而且在我的本地 PC 上仍然运行良好。

编辑:

写日志:

public static void WriteErrorLog(string Message)
{
StreamWriter sw = null;
try
{
lock (locker)
{
sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\Logs\\LogFile.txt", true);
sw.WriteLine(DateTime.Now.ToString() + ": " + Message);
sw.Flush();
sw.Close();
}
}
catch (Exception excep)
{
try
{
// .... Inserting ErrorLog in DB ....
}
catch
{
throw excep;
}
throw excep;
}
}

每次我停止服务时,我还在 OnStop() 上记录了一个类似“Service Stopped”的条目和它的日志,所以问题不可能存在于 WriteLog 功能。

最佳答案

我建议您按照这个 MSDN 示例重构您的代码。在您的代码中困扰我的是,您从不等待任务在任何地方完成。

The following example starts 10 tasks, each of which is passed an index as a state object. Tasks with an index from two to five throw exceptions. The call to the WaitAll method wraps all exceptions in an AggregateException object and propagates it to the calling thread.

Source : Task.WaitAll Method (Task[])

示例中的这一行可能有些重要:

Task.WaitAll(tasks.ToArray());

关于c# - System.Threading.Task 未在生产环境中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37654776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com