c# - 这是定期异步下载的好代码吗?

标签 c# .net visual-studio timer task-parallel-library

我正在使用 Windows 服务定期检查更新。就像一两​​分钟。为此,我使用 .net 4.6.1 和

  1. 系统计时器,&
  2. 任务

下面是我的代码

    /// <summary>
    /// Download updates from server
    /// </summary>
    /// <returns></returns>
    private void DownloadUpdate()
    {
        try
        {
            var package = string.Empty;
            if (_server != null)
            {
                timer.Stop();
                package = _server.Download();
                if (package.Length > 0)
                    _server.Install(package);
            }
        }

        finally
        {

            timer.Start();

        }

    }

    /// <summary>
    /// To carry out download asynchronous way
    /// </summary>
    private async void DowloadUpdateAsync()
    {
       await Task.Run(()=>DownloadUpdate());
    }

只是想知道,如果它是管理间隔的正确方法。

最佳答案

  1. 对于async 方法,如果您不希望它返回结果,则返回Task。见this link .

  2. Task.Run(()=>DownloadUpdate());可以简化为Task.Run(DownloadUpdate);

  3. 我真的看不出有任何理由需要将任务包装在 async 方法中。由于 DownloadUpdate 不是异步的,它无论如何都会阻塞一个线程,您需要做的就是将它作为一个 Task 运行,或者直接将它排队到线程池中。

关于c# - 这是定期异步下载的好代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41390436/

相关文章:

javascript - 通过 AJAX POST 请求将大文件传递到服务器时出错(IIS 7、ASP.NET MVC 4)

c# - Javascript 在 asp.net 中验证开始日期和结束日期

c# - 在 C# View Helper 中使用 Request.QueryString

c# - 如何在VS2012中获取多个锁而不弄乱缩进

c# - 如何审核 asp.net/SQL Server 用户

c# - 从 Active Directory 中读取已删除的用户

.net - .NET CLR-对象引用同步

c# - SQLite 中为 String 分配了多少空间?

c - 语法错误 : missing ';' before 'type' IN C

asp.net-mvc - VisualStudio 2013 列出所有 NuGet 包