是否可以找出具有特定任务ID的任务是否存在?当我试图获得状态时,我将永远等待.
>>> AsyncResult('...').status
'PENDING'
Run Code Online (Sandbox Code Playgroud)
我想知道给定的任务ID是否是真正的芹菜任务ID而不是随机字符串.我想要不同的结果取决于是否有某个id的有效任务.
过去可能存在具有相同ID的有效任务,但结果可能已从后端删除.
我试图在任务上设置公寓状态但是看不到这样做的选项.有没有办法使用任务执行此操作?
for (int i = 0; i < zom.Count; i++)
{
Task t = Task.Factory.StartNew(zom[i].Process);
t.Wait();
}
Run Code Online (Sandbox Code Playgroud) 我有一个方法,它可以完成两个独立的逻辑.我希望我可以运行他们都在同一时间 ..当这两个孩子的方法完成事后才继续.
我试图弄清楚async/await
语法,但我只是不明白.
这是代码:
public PewPew SomeMethod(Foo foo)
{
var cats = GetAllTheCats(foo);
var food = GetAllTheFood(foo);
return new PewPew
{
Cats = cats,
Food = food
};
}
private IList<Cat> GetAllTheCats(Foo foo)
{
// Do stuff, like hit the Db, spin around, dance, jump, etc...
// It all takes some time.
return cats;
}
private IList<Food> GetAllTheFood(Foo foo)
{
// Do more stuff, like hit the Db, nom nom noms...
// It all takes …
Run Code Online (Sandbox Code Playgroud) 我有一些简单的代码作为repro:
var taskTest = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
}).ContinueWith((Task t) =>
{
Console.WriteLine("ERR");
}, TaskContinuationOptions.OnlyOnFaulted);
try
{
Task.WaitAll(taskTest);
}
catch (AggregateException ex)
{
foreach (var e in ex.InnerExceptions)
Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
}
Run Code Online (Sandbox Code Playgroud)
但是,我在try catch块中抛出一个意外的TaskCanceledException(它在AggregateException InnerExceptions对象中)."任务被取消了".
为什么我得到这个例外?任务的Continuation永远不会触发,它没有生成任何异常,但在等待时我仍然得到聚合异常....
我希望有人能解释一下这对我有多大意义:)
task killer
应用程序的实用性是有争议的,但我想知道:它们如何实际工作?如何杀死特定进程?
是否有一个API,如果是这样,它实际上做了什么?
编辑
值得补充:我看到任务杀手应用会杀死进程not rooted devices
.所以,我想知道如何杀死Android中没有的进程?
我有一个Rake任务,我在下面简化了.我在Windows上使用Ruby 1.9.
也许您想猜测下面调用Rake任务"list_all_levels"的结果?它应该是:
"Hello level 1"
"Hello level 2"
"Hello level 3"
Run Code Online (Sandbox Code Playgroud)
但由于我不知道的原因,它只打印"Hello level 1"然后停止.
也就是说,它始终只调用第一个任务.如果我更改第一行以传递arg"42",它将打印"Hello level 42"然后停止.
我想知道为什么它不会调用任务3次并打印所有3行?有没有办法让它按照我的期望工作?
task :list_all_levels => [] do
Rake::Task[:list].invoke 1
Rake::Task[:list].invoke 2
Rake::Task[:list].invoke 3
end
task :list, [:level] => [] do |t, args|
puts "Hello level #{args.level}"
end
Run Code Online (Sandbox Code Playgroud) 如何从Jenkins GUI中删除构建?我知道我可以从'jobs'文件夹中删除该目录,但我想从GUI中删除它.是否也可以删除多个构建?
我正在使用HttpClient将数据发布到.NET 4.0项目中的远程服务.我不关心这个操作阻塞,所以我想我可以跳过ContinueWith或async/await并使用Result.
在调试时,我遇到了远程服务器没有响应的问题.当我逐步完成代码时,似乎我的代码在第三行停止运行...当前堆栈指针线停止突出显示为黄色,并且没有前进到下一行.它刚刚消失了.我花了一段时间才意识到我应该等待请求超时.
var client = new HttpClient();
var task = client.PostAsync("http://someservice/", someContent);
var response = task.Result;
Run Code Online (Sandbox Code Playgroud)
我的理解是调用任务上的Result导致代码同步执行,表现得更像这样(我知道HttpClient中没有Post方法):
var client = new HttpClient();
var response = client.Post("http://someservice/", someContent);
Run Code Online (Sandbox Code Playgroud)
我不确定这是件坏事,我只是试图理解它.真的是因为HttpClient正在返回Tasks而不是直接返回结果,我的应用程序即使在我认为我正在避免它时也会自动利用异步吗?
ConfigureAwait(false)
在C#中使用await/async 时,有很多指南可供使用.
似乎一般的建议是ConfigureAwait(false)
在库代码中使用,因为它很少依赖于同步上下文.
但是,假设我们正在编写一些非常通用的实用程序代码,它将函数作为输入.一个简单的例子可能是以下(不完整的)功能组合器,以简化基于任务的简单操作:
地图:
public static async Task<TResult> Map<T, TResult>(this Task<T> task, Func<T, TResult> mapping)
{
return mapping(await task);
}
Run Code Online (Sandbox Code Playgroud)
FlatMap:
public static async Task<TResult> FlatMap<T, TResult>(this Task<T> task, Func<T, Task<TResult>> mapping)
{
return await mapping(await task);
}
Run Code Online (Sandbox Code Playgroud)
问题是,我们应该ConfigureAwait(false)
在这种情况下使用吗?我不确定上下文捕获是如何工作的.关闭.
一方面,如果组合器以功能方式使用,则不需要同步上下文.另一方面,人们可能会滥用API,并在提供的函数中执行依赖于上下文的内容.
一种选择是为每个场景(Map
和/ MapWithContextCapture
或某些东西)设置单独的方法,但感觉很难看.
另一种选择可能是将map/flatmap选项添加到a中ConfiguredTaskAwaitable<T>
,但是由于等待不必实现接口,这会导致大量冗余代码,在我看来更糟糕.
是否有一种将责任转交给调用者的好方法,这样实现的库就不需要对提供的映射函数中是否需要上下文做出任何假设?
或者仅仅是一个事实,异步方法组成得不是很好,没有各种假设?
只是为了澄清一些事情:
ConfigureAwait(false)
将导致空同步.上下文.正如一些答案所提到的那样,可以在方法中添加一个bool-flag,但正如我所看到的,这也不是太漂亮,因为它必须一直传播到API中(因为它有)更多"实用"功能,取决于上面显示的功能.
c# task synchronizationcontext task-parallel-library async-await
我从Task.Run中捕获异常时遇到了问题.我更改了代码并解决了问题.我愿意弄清楚在这两种方式下处理Task.Run中的异常有什么区别:
在Outside函数中我无法捕获异常,但在Inside中我可以捕获它.
void Outside()
{
try
{
Task.Run(() =>
{
int z = 0;
int x = 1 / z;
});
}
catch (Exception exception)
{
MessageBox.Show("Outside : " + exception.Message);
}
}
void Inside()
{
Task.Run(() =>
{
try
{
int z = 0;
int x = 1 / z;
}
catch (Exception exception)
{
MessageBox.Show("Inside : "+exception.Message);
}
});
}
Run Code Online (Sandbox Code Playgroud) task ×10
c# ×6
async-await ×2
.net ×1
android ×1
asynchronous ×1
build ×1
celery ×1
concurrency ×1
jenkins ×1
kill-process ×1
multitasking ×1
pfx ×1
python ×1
rake ×1
ruby ×1
status ×1