Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理时下载_C#_.net_Multithreading_Timer - Fatal编程技术网

C# 处理时下载

C# 处理时下载,c#,.net,multithreading,timer,C#,.net,Multithreading,Timer,我有以下场景,每x分钟一个计时器: 从rest服务(用php制作)下载一个要工作的项目 运行一个批处理过程来细化项目 现在,应用程序已经功能齐全,但我想在应用程序处理另一个项目时,加快下载另一个项目(如果rest服务中存在)的整个过程 我想我需要一个缓冲区/队列来完成这个任务,比如BlockingCollection,但我不知道如何使用它 完成我所要做的事情的正确方法是什么 提前谢谢你 您可以做的是创建一个函数,用于检查要下载的新文件。让这个函数作为自己的后台线程启动,在无限循环中运行,在每次迭

我有以下场景,每x分钟一个计时器:

  • 从rest服务(用php制作)下载一个要工作的项目
  • 运行一个批处理过程来细化项目
  • 现在,应用程序已经功能齐全,但我想在应用程序处理另一个项目时,加快下载另一个项目(如果rest服务中存在)的整个过程

    我想我需要一个缓冲区/队列来完成这个任务,比如BlockingCollection,但我不知道如何使用它

    完成我所要做的事情的正确方法是什么


    提前谢谢你

    您可以做的是创建一个函数,用于检查要下载的新文件。让这个函数作为自己的后台线程启动,在无限循环中运行,在每次迭代中检查新的下载。如果它找到任何需要下载的文件,则调用单独的函数将该文件作为新线程下载。一旦文件完成下载,这个新的下载函数就可以调用处理函数作为另一个线程。使用这种方法,您将在需要时为多个文件并行运行所有任务

    通过这样做,函数可以作为新线程启动

    Thread thread = new Thread(FunctionName);
    thread.start();
    

    使用微软的反应式框架(NuGet“System.Reactive”)。然后你可以这样做:

    var x_minutes = 5;
    
    var query =
        from t in Observable.Interval(TimeSpan.FromMinutes(x_minutes))
        from i in Observable.Start(() => DownloadAnItem())
        from e in Observable.Start(() => ElaborateItem(i))
        select new { i, e };
    
    var subscription =
        query.Subscribe(x =>
        {
            // Do something with each `x.i` & `x.e`
        });
    
    多线程和简单

    如果要停止处理,只需调用
    subscription.Dispose()