我有一个执行testng测试套件的gradle任务.我希望能够将标志传递给任务以便使用特殊的testng xml套件文件(或者如果未设置标志,则只使用默认套件).
gradle test
Run Code Online (Sandbox Code Playgroud)
应该运行默认的标准测试套件
gradle test -Pspecial
Run Code Online (Sandbox Code Playgroud)
应该运行特殊的测试套件
我一直在尝试这样的事情:
test {
if (special) {
test(testng_special.xml);
}
else {
test(testng_default.xml);
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到一个未定义的属性错误.这是怎样的正确方法?
有人可以解释一下gulp安装的以下两种方法之间究竟有什么区别:
$ npm install --global gulp-cli
Run Code Online (Sandbox Code Playgroud)
和
$ sudo npm install -g gulp
Run Code Online (Sandbox Code Playgroud)
在我看来,两者都做同样的事情,除了第一种方法给我一个版本1.2.1,后来给我版本3.9.1
有人可以简单地说出究竟是什么区别?加上什么是"cli"代表什么?
我正在为Google Cloud API编写客户端库,这些库具有相当常见的异步帮助程序重载模式:
目前我们正在使用异步方法,但是:
(await foo.Bar().ConfigureAwait(false)).TransformToBaz()括号很烦人.使用两个语句可以提高可读性,但这意味着我们不能使用表达式身体方法.ConfigureAwait(false)- 这在某种程度上可以通过工具解决,但它仍然有点气味Task<TResult>.ContinueWith听起来是个好主意,但我读过Stephen Cleary的博客文章推荐反对它,原因看似合理.我们正在考虑Task<T>为此添加扩展方法:
潜在的延伸方法
public static async Task<TResult> Convert<TSource, TResult>(
this Task<TSource> task, Func<TSource, TResult> projection)
{
var result = await task.ConfigureAwait(false);
return projection(result);
}
Run Code Online (Sandbox Code Playgroud)
然后我们可以非常简单地从同步方法中调用它,例如
public async Task<Bar> BarAsync()
{
var fooRequest = BuildFooRequest();
return FooAsync(fooRequest).Convert(foo => new Bar(foo));
}
Run Code Online (Sandbox Code Playgroud)
甚至:
public Task<Bar> BarAsync() =>
FooAsync(BuildFooRequest()).Convert(foo => new Bar(foo));
Run Code Online (Sandbox Code Playgroud)
它看起来如此简单和有用,我有点惊讶没有已经可用的东西.
作为我使用它来使表达式方法工作的一个例子,在Google.Cloud.Translation.V2代码中我有两种方法来翻译纯文本:一个接受一个字符串,一个接受多个字符串.单字符串版本的三个选项是(在参数方面有所简化):
常规异步方法
public async Task<TranslationResult> TranslateTextAsync( …Run Code Online (Sandbox Code Playgroud) 我想向服务器发送请求并处理返回的值:
private static string Send(int id)
{
Task<HttpResponseMessage> responseTask = client.GetAsync("aaaaa");
string result = string.Empty;
responseTask.ContinueWith(x => result = Print(x));
responseTask.Wait(); // it doesn't wait for the completion of the response task
return result;
}
private static string Print(Task<HttpResponseMessage> httpTask)
{
Task<string> task = httpTask.Result.Content.ReadAsStringAsync();
string result = string.Empty;
task.ContinueWith(t =>
{
Console.WriteLine("Result: " + t.Result);
result = t.Result;
});
task.Wait(); // it does wait
return result;
}
Run Code Online (Sandbox Code Playgroud)
我使用Task得当吗?我不这么认为,因为该Send()方法string.Empty每次都Print返回,同时返回正确的值.
我究竟做错了什么?如何从服务器获得正确的结果?
执行以下操作之间有什么区别:
async Task<T> method(){
var r = await dynamodb.GetItemAsync(...)
return r.Item;
}
Run Code Online (Sandbox Code Playgroud)
VS
async Task<T> method(){
var task = dynamodb.GetItemAsync(...)
return task.Result.Item;
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,由于某种原因,只有第二个工作.第一个似乎永远不会结束.
发布我的Web应用程序项目后,世界上最简单的任务(见下文)没有被执行.知道为什么吗?
<Target Name="AfterPublish">
<Copy SourceFiles="C:\A.txt" DestinationFiles="C:\B.txt" />
</Target>
Run Code Online (Sandbox Code Playgroud) 我有一个任务,我希望它能在一秒钟内运行,但是如果需要的时间超过几秒钟,我想取消任务.
例如:
Task t = new Task(() =>
{
while (true)
{
Thread.Sleep(500);
}
});
t.Start();
t.Wait(3000);
Run Code Online (Sandbox Code Playgroud)
请注意,等待3000毫秒后,等待到期.超时到期或任务是否仍在运行时,任务是否被取消?
我正在使用芹菜,我有几个需要按顺序执行的任务.
例如,我有这个任务:
@celery.task
def tprint(word):
print word
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
>>> chain(tprint.s('a') | tprint.s('b'))()
Run Code Online (Sandbox Code Playgroud)
然后我明白了TypeError: tprint() takes exactly 1 argument (2 given).
和弦一样,在这种情况下我需要在一组任务后执行任务:
>>> chord([tprint.s('a'), tprint.s('b')])(tprint.s('c'))
Run Code Online (Sandbox Code Playgroud)
那么如何处理这种情况呢?我不关心每项任务的结果,但需要按顺序执行.
添加第二个参数将无法正常工作:
@celery.task
def tprint(word, ignore=None):
print word
>>> chain(tprint.s('a', 0) | tprint.s('b'))()
Run Code Online (Sandbox Code Playgroud)
这将打印出'a'和'None'.
我有一个JIRA过滤器,可以在将来的版本中返回所有修复:
project = MyProject AND fixVersion = "1.1.1" and issuetype in standardIssueTypes() and status != Closed
所有这些问题都有子任务,我想在新的过滤结果中使用.他们没有fixVersion这套.
我尝试了parent过滤器,但这只接受密钥或ID.
有没有办法我可以编写一个过滤器来访问这些,而无需手动使用类似的东西parent in (MyProject-1,MyProject-2,MyProject-3,MyProject-4,etc)?
如果任何正在运行的任务抛出异常,我想让Task.WaitAll()爆发,这样我就不必等待60秒才能完成.我该如何实现这种行为?如果WaitAll()无法实现,那么还有其他c#功能或解决方法吗?
Task task1 = Task.Run(() => throw new InvalidOperationException());
Task task2 = ...
...
try
{
Task.WaitAll(new Task[]{task1, task2, ...}, TimeSpan.FromSeconds(60));
}
catch (AggregateException)
{
// If any exception thrown on any of the tasks, break out immediately instead of wait all the way to 60 seconds.
}
Run Code Online (Sandbox Code Playgroud)