【问题标题】:C# Task.Start() does not work on Release buildC# Task.Start() 不适用于发布版本
【发布时间】:2018-03-29 03:57:06
【问题描述】:

我有一个程序运行一个方法,像这样抛出多个任务

private static readonly Task[] Tasks = new Task[Properties.Settings.Default.NumberOfTasksToConsume];
public static void StartService()
{
    for (var i = 0; i < Tasks.Length; i++)
    {
        Tasks[i] = new Task(() => ProcessAbonents(Properties.Settings.Default.NumberOfRecordsToRetrive));
        Tasks[i].Start();
    }

    Task.WaitAll(Tasks);

    Task.Run(() => DeleteAbonents((int)EnumCategories.Social));

    if (BadPhoneNumbers.Count > 0)
        Task.Run(() => SaveBadNumbers((int)EnumCategories.Social));

    if (Errors.Count > 0)
        Task.Run(() => SendEmail());
}

当程序构建处于调试模式时,它可以工作并进入“ProcessAbonents”方法,但当构建处于发布模式时,for循环工作正常,但它没有进入此方法。

【问题讨论】:

  • 请清理并重建并检查您的发现。也许使用一些日志记录。这对您提供的代码没有意义
  • 你在某处等待任务吗?也许程序在任务开始之前就结束了?
  • @plainionist 否 在循环内部有方法 ProcessAbonents 的调用,但它仅在发布版本时才进入此方法。调试构建工作正常。
  • 可能是 Properties.Settings.Default.NumberOfTasksToConsume 为 Debug 和 Release 设置不同?
  • @ShayYizhak 不,两个版本都是一样的。

标签: c# parallel-processing async-await task


【解决方案1】:

问题解决了。有 Oracle.DataAccess.dll x64,我的项目在任何 CPU 上,在调试时它工作正常,但在发布时它可能在 x86 上。现在,当我将项目更改为 x64 构建时,它在 Release 上也可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多