无法停止预定任务

时间:2019-10-09 10:05:17

标签: c# sqlite windows-task-scheduler

我有一个Windows窗体应用程序,该程序运行一些任务以读取数据库sqlite,如果文件在计算机上运行则发送该文件,否则执行相反的操作(读取数据并填充另一个sqlite数据库)。

如果我以用户身份运行应用程序似乎没问题,但是如果我创建了计划任务(在Windows 10或Windows Server 2012上),我会看到状态始终在运行,有时我在自定义日志中看到的错误消息为

  

System.IO.Exception:进程无法访问文件c:... mydatabase.db,因为它被另一个进程使用。

我认为预定的任务过程没有结束,因此它尝试访问先前执行中正在使用的资源 有可能吗?

我将获得与已设置的其他任务一样的状态“就绪”。

我认为在program.cs上将异步作为我的主要方法不是一个好主意。

在我的代码中,您看到我创建了sqlite数据库,如果任务完成,我将创建一个zip文件,并使用ftp发送该zip。

static async Task Main(string[] args)
{
    args = new string[] { "ARGUMENT1" };//test
    if (args != null && args.Length > 0)
    {
        var task = args[0];
        if (task == "ARGUMENT1")
        {
            var form = new SerializerForm();
            try
            {                    
                var serialize = Task.Run(async () =>
                {
                    await form.SerializeDbToSQLiteAsync();
                });

                serialize.Wait();
                if (serialize.Status == TaskStatus.RanToCompletion)
                {
                    Task.Run(async () =>
                    {
                        await form.CompressDatabaseAsync();
                    }).Wait();

                    Task.Run(async () =>
                    {
                        await form.FtpUploadAsync();
                    }).Wait();

                    await form.SendMailAsync($"Serializer complete");
                }
            }
            catch (Exception ex)
            {
                string errorMessage = $"ex...";
                await form.SendMailAsync(errorMessage);
                await form.LogAsync("SerializationScheduled", errorMessage);
            }
        }
        else
        {
            var form = new DeserializerForm();
            //perform deserialization
    }
    else
    {
       //normal esecution windows form            
    }
}

更新 虽然我的代码很糟糕,但问题不在于使用async / await(正如大家所说的那样,我再说一遍是不好的)。 我注意到使用静态方法确实可以实例化SerializerForm对象,我注意到代码在两种情况下均能很好地工作:当用户运行程序以及我计划应用程序时

那么你能解释为什么吗? 提前Tks

0 个答案:

没有答案