所以我正在尝试学习如何用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的结果.问题是字段结果不可用...
我在这里缺少什么?
所以在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) 默认情况下,CLR在池化线程上运行任务,这对于短期运行的计算绑定工作是理想的.对于长时间运行和阻塞操作,可以按如下方式阻止使用池化线程:
Run Code Online (Sandbox Code Playgroud)Task task = Task.Factory.StartNew (() => ..., TaskCreationOptions.LongRunning);
我正在阅读关于thread和的主题task.你能解释一下"长[呃] - 跑"和"短跑"的任务是什么?
我想用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有效地实现功能?我试图通过使用互斥锁和条件变量来解决这个问题.
我看到两种方式:
调度程序包含两个队列:allTasksQueue和tasksReadyToRunQueue.任务被加入allTasksQueue的Scheduler::add.有一个管理线程,其等待的时间量最小,因此它可以从把一个任务allTasksQueue来tasksReadyToRunQueue.工作线程等待可用的任务tasksReadyToRunQueue.
如果Scheduler::add在前面添加一个任务allTasksQueue(一个任务,其值为delayToRunso,它应该在当前最快运行任务之前),那么管理器任务需要被唤醒,因此它可以更新等待时间.
这种方法可以被认为是低效的,因为它需要两个队列,并且它需要两个condvar.signals来运行任务(一个用于allTasksQueue- > tasksReadyToRunQueue,一个用于表示工作线程实际运行任务)
调度程序中有一个队列.任务将添加到此队列中Scheduler::add.工作线程检查队列.如果它是空的,它会在没有时间限制的情况下等待.如果它不为空,则等待最快的任务.
如果只有一个条件变量为工作线程等待:这个方法可以被认为是低效的,因为如果在队列前面添加了一个任务(前面意味着,如果有N个工作线程,那么任务索引<N)然后需要唤醒所有工作线程以更新他们等待的时间.
如果每个线程都有一个单独的条件变量,那么我们可以控制唤醒哪个线程,所以在这种情况下我们不需要唤醒所有线程(我们只需要唤醒具有最大等待时间的线程) ,所以我们需要管理这个值).我目前正在考虑实现这一点,但确切的细节是很复杂的.有关此方法的任何建议/想法/文件吗?
有没有更好的解决方案来解决这个问题?我正在尝试使用标准C++功能,但我愿意使用平台依赖(我的主要平台是linux)工具(如pthreads),甚至是linux特定工具(如futexes),如果它们提供了更好的解决方案.
虽然这个问题特别适用于Azure,但我确信这是云计算的常见情况.
我有一个我需要在某个时间运行的任务列表.使用窗口的服务器,我可以使用任务计划程序并安排我的程序在特定时间运行.我可以更进一步,创建一个以给定间隔运行的Windows服务,然后执行适当的任务.
有没有人对云计算环境有最佳方法的建议?
我可以创建一个工作者角色,每秒轮询一次任务列表,然后将相应的任务抛出到由另一个工作者角色处理的队列中.
我可以创建一个每天运行一次的工作者角色,抓取所有任务并将它们提交到队列中.然后,处理器角色将一个项目从队列中拉出并在适当的时间处理.
还有其他建议吗?
我需要描述rake任务.因为我是菜鸟我只知道如何配置.rb代码如下:ruby -Ilib -S ruby-prof -p graph_html profile.rb > profile.html
但是,我如何描述特定的Rake任务?
我有两个问题:
onPreExecute(),onProgressUpdate(Progress...)并onPostExecute(Result)在UI线程上调用?我想知道,因为我在工作线程上运行了TCP连接,当收到数据包时,我想启动一个新线程来解析这个数据包,之后刷新UI线程上的一些数据结构.
提前致谢!
我一直在查看我们的一个应用程序中的一些代码,如下所示:
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和嵌入式技术方面拥有丰富的经验.目前我正在忙着用C#(.NET)编写一些使用硬件进行数据采集的应用程序.现在以下,对我来说,燃烧,问题:
例如:我有一台机器,它有一个用于检测轴最终位置的开关.现在我正在使用USB数据采集模块来读取数据.目前我正在使用Thread来连续读取端口状态.
此设备上没有中断功能.
我的问题:这是正确的方法吗?我应该使用计时器,线程还是任务?我知道民意调查是你们大多数人"讨厌"的事情,但欢迎任何建议!
我需要一种方法来设置异步任务,因为长时间运行而不使用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)并将任务设置为长时间运行?