标签: task

Threading.Tasks.Task'不包含'Result'的定义

所以我正在尝试学习如何用Task编程,我正在做练习:

public static int ReturnFirstResult(Func<int>[] funcs)
{
        Task[] tasks = new Task[funcs.Length];
        for (int i = 0; i < funcs.Length; i++)
        {
            tasks[i] = CreatingTask(funcs[i]);
        }
        return Task<int>.Factory.ContinueWhenAny(tasks, (firstTask) =>
                                                            {
                                                                Console.WriteLine(firstTask.Result);
                                                                return ***????***;
                                                            }).***Result***;
}
private static Task CreatingTask(Func<int> func)
{
        return Task<int>.Factory.StartNew(() => { return func.Invoke(); });
}
Run Code Online (Sandbox Code Playgroud)

我正在给一个Funcs数组运行,ideia是返回第一个完成func的结果.问题是字段结果不可用...

我在这里缺少什么?

.net c# task

20
推荐指数
2
解决办法
1万
查看次数

Gruntjs:如何使复制任务仅复制手表上已更改的文件

所以在grunt-contrib-watch插件信息页面上,有一个关于如何只为更改的文件运行jshint的示例.

grunt.initConfig({
  watch: {
    scripts: {
      files: ['lib/*.js'],
      tasks: ['jshint'],
      options: {
        nospawn: true,
      },
    },
  },
  jshint: {
    all: ['lib/*.js'],
  },
});

grunt.event.on('watch', function(action, filepath) {
  grunt.config(['jshint', 'all'], filepath);
});
Run Code Online (Sandbox Code Playgroud)

我没有测试过自己的例子.但是拿了这个并应用于我的复制任务,但没有成功.grunt-contrib-copy任务设置为我的角度项目复制图像和模板.而且我很高兴知道我是否可以将这项工作用于复制任务,如果可以的话,我做错了什么.

非常感谢.

这是我剥离出的Gruntfile.js.

// Build configurations.
module.exports = function(grunt){

  // Project configuration.
    grunt.initConfig({

      pkg: grunt.file.readJSON('package.json'),

      // Copies directories and files from one location to another.
      copy: {
        // DEVELOPMENT
        devTmpl: {
          files: [{
            cwd     : 'src/tpl/',
            src     : ['**/*'], 
            dest    : 'app/tpl/',
            flatten : false,
            expand  : true
          }] …
Run Code Online (Sandbox Code Playgroud)

plugins task gruntjs

20
推荐指数
2
解决办法
1万
查看次数

"长期任务"是什么意思?

默认情况下,CLR在池化线程上运行任务,这对于短期运行的计算绑定工作是理想的.对于长时间运行和阻塞操作,可以按如下方式阻止使用池化线程:

Task task = Task.Factory.StartNew (() => ...,
TaskCreationOptions.LongRunning);
Run Code Online (Sandbox Code Playgroud)

我正在阅读关于thread和的主题task.你能解释一下"长[呃] - 跑"和"短跑"的任务是什么?

.net c# multithreading task

20
推荐指数
1
解决办法
8843
查看次数

如何在C++中创建高效的多线程任务调度程序?

我想用C++创建一个非常有效的任务调度程序系统.

基本的想法是这样的:

class Task {
    public:
        virtual void run() = 0;
};

class Scheduler {
    public:
        void add(Task &task, double delayToRun);
};
Run Code Online (Sandbox Code Playgroud)

在后面Scheduler,应该有一个固定大小的线程池,它运行任务(我不想为每个任务创建一个线程).delayToRun意味着task不会立即执行,但会在delayToRun几秒后执行(从添加到其中的点开始测量Scheduler).

(当然,这delayToRun意味着"至少"值.如果系统被加载,或者我们从调度程序中询问不可能,它将无法处理我们的请求.但它应该尽力而为)

这是我的问题.如何delayToRun有效地实现功能?我试图通过使用互斥锁和条件变量来解决这个问题.

我看到两种方式:

用经理线程

调度程序包含两个队列:allTasksQueuetasksReadyToRunQueue.任务被加入allTasksQueueScheduler::add.有一个管理线程,其等待的时间量最小,因此它可以从把一个任务allTasksQueuetasksReadyToRunQueue.工作线程等待可用的任务tasksReadyToRunQueue.

如果Scheduler::add在前面添加一个任务allTasksQueue(一个任务,其值为delayToRunso,它应该在当前最快运行任务之前),那么管理器任务需要被唤醒,因此它可以更新等待时间.

这种方法可以被认为是低效的,因为它需要两个队列,并且它需要两个condvar.signals来运行任务(一个用于allTasksQueue- > tasksReadyToRunQueue,一个用于表示工作线程实际运行任务)

没有经理线程

调度程序中有一个队列.任务将添加到此队列中Scheduler::add.工作线程检查队列.如果它是空的,它会在没有时间限制的情况下等待.如果它不为空,则等待最快的任务.

  1. 如果只有一个条件变量为工作线程等待:这个方法可以被认为是低效的,因为如果在队列前面添加了一个任务(前面意味着,如果有N个工作线程,那么任务索引<N)然后需要唤醒所有工作线程以更新他们等待的时间.

  2. 如果每个线程都有一个单独的条件变量,那么我们可以控制唤醒哪个线程,所以在这种情况下我们不需要唤醒所有线程(我们只需要唤醒具有最大等待时间的线程) ,所以我们需要管理这个值).我目前正在考虑实现这一点,但确切的细节是很复杂的.有关此方法的任何建议/想法/文件吗?


有没有更好的解决方案来解决这个问题?我正在尝试使用标准C++功能,但我愿意使用平台依赖(我的主要平台是linux)工具(如pthreads),甚至是linux特定工具(如futexes),如果它们提供了更好的解决方案.

c++ linux multithreading pthreads task

20
推荐指数
3
解决办法
5695
查看次数

Azure任务计划程序

虽然这个问题特别适用于Azure,但我确信这是云计算的常见情况.

我有一个我需要在某个时间运行的任务列表.使用窗口的服务器,我可以使用任务计划程序并安排我的程序在特定时间运行.我可以更进一步,创建一个以给定间隔运行的Windows服务,然后执行适当的任务.

有没有人对云计算环境有最佳方法的建议?

我可以创建一个工作者角色,每秒轮询一次任务列表,然后将相应的任务抛出到由另一个工作者角色处理的队列中.

我可以创建一个每天运行一次的工作者角色,抓取所有任务并将它们提交到队列中.然后,处理器角色将一个项目从队列中拉出并在适当的时间处理.

还有其他建议吗?

cloud scheduling task azure

19
推荐指数
3
解决办法
1万
查看次数

如何描述Rake任务?

我需要描述rake任务.因为我是菜鸟我只知道如何配置.rb代码如下:ruby -Ilib -S ruby-prof -p graph_html profile.rb > profile.html

但是,我如何描述特定的Rake任务?

profile rake task ruby-prof

19
推荐指数
1
解决办法
3508
查看次数

在工作线程中启动异步任务

我有两个问题:

  • 我们可以在工作线程中启动/执行异步任务吗?
  • 如果是,方法onPreExecute(),onProgressUpdate(Progress...)onPostExecute(Result)在UI线程上调用?

我想知道,因为我在工作线程上运行了TCP连接,当收到数据包时,我想启动一个新线程来解析这个数据包,之后刷新UI线程上的一些数据结构.

提前致谢!

multithreading android asynchronous task

19
推荐指数
3
解决办法
1万
查看次数

AggregateException - AggregateException.Flatten().InnerException表示什么?

我一直在查看我们的一个应用程序中的一些代码,如下所示:

catch (AggregateException ae)
{
    this._logger.Log(ae.Flatten().InnerException.ToString(), Category.Exception, Priority.High);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是这个.我知道是什么AggregateException.Flatten(),我知道AggregateException.Flatten().InnerExceptions代表什么.但是,AggregateException.Flatten().InnerException(单个)代表什么?

c# multithreading exception-handling exception task

19
推荐指数
1
解决办法
8819
查看次数

轮询正确的方式?

我是一名软件/硬件工程师,在C和嵌入式技术方面拥有丰富的经验.目前我正在忙着用C#(.NET)编写一些使用硬件进行数据采集的应用程序.现在以下,对我来说,燃烧,问题:

例如:我有一台机器,它有一个用于检测轴最终位置的开关.现在我正在使用USB数据采集模块来读取数据.目前我正在使用Thread来连续读取端口状态.

此设备上没有中断功能.

我的问题:这是正确的方法吗?我应该使用计时器,线程还是任务?我知道民意调查是你们大多数人"讨厌"的事情,但欢迎任何建议!

c# hardware multithreading task polling

19
推荐指数
1
解决办法
3万
查看次数

如何将LongRunning标志专门传递给Task.Run()?

我需要一种方法来设置异步任务,因为长时间运行而不使用Task.Factory.StartNew(...)而是使用Task.Run(...)或类似的东西.

语境:

我有连续循环的任务,直到它被外部取消,我想设置为'长时间运行'(即给它一个专用的线程).这可以通过以下代码实现:

var cts = new CancellationTokenSource();
Task t = Task.Factory.StartNew(
async () => {
while (true)
{
    cts.Token.ThrowIfCancellationRequested();
    try
    {
        "Running...".Dump();
        await Task.Delay(500, cts.Token);
    }
    catch (TaskCanceledException ex) { }
} }, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
Run Code Online (Sandbox Code Playgroud)

问题是Task.Factory.StartNew(...)不返回传入的活动异步任务,而是返回"运行Action的任务",其功能上始终具有taskTatus的'RanToCompletion'.由于我的代码需要能够跟踪任务的状态以查看它何时变为"已取消"(或"故障"),我需要使用以下内容:

var cts = new CancellationTokenSource();
Task t = Task.Run(
async () => {
while (true)
{
    cts.Token.ThrowIfCancellationRequested();
    try
    {
        "Running...".Dump();
        await Task.Delay(500, cts.Token);
    }
    catch (TaskCanceledException ex) { }
} }, cts.Token);
Run Code Online (Sandbox Code Playgroud)

Task.Run(...),根据需要,返回异步过程本身,允许我获得'已取消'或'故障'的实际状态.但是,我无法将任务指定为长时间运行.那么,任何人都知道如何最好地运行异步任务,同时存储该活动任务本身(使用所需的taskStatus)并将任务设置为长时间运行?

.net c# asynchronous task

19
推荐指数
5
解决办法
1万
查看次数