我有一个返回的对象System.Threading.Tasks.Task:
public class MyClass
{
public Task GetTask(object state, CancellationToken cancellationToken)
{
return new Task(Execute, state, cancellationToken);
}
public void Execute(object context)
{
//do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
在其他地方,我有一个List<MyClass>,所以我做以下来得到一个List<Task>:
var myTaskList = myClassList.Select(p => p.GetTask(null, cancellationToken)).ToList();
Run Code Online (Sandbox Code Playgroud)
现在我有了,我List<Task>怎么能并行启动它们?是否有更简洁的方法来编码?
谢谢!
我一直在使用 Azure DevOps 发布定义并从一些 C# 代码触发它:
var releaseClient = VssConnection.GetClient<ReleaseHttpClient>();
return await releaseClient.CreateReleaseAsync(
_releaseDefinitionId,
$"Release run for {build.BuildNumber}",
build.Definition.Name,
build.Id,
new Dictionary<string, string> {
{ "InputVariable1", _value1 },
{ "InputVariable2", _value2 },
{ "DatabaseConnectionString", "xxxxxxx" }
});
Run Code Online (Sandbox Code Playgroud)
我现在已将该发布定义转换为纯 YAML 管道 - 有什么方法可以从 C# 触发该管道的运行吗?
谢谢!
我有两个长时间运行的任务想要执行,然后继续执行。我遇到的问题是,在两个长时间运行的任务发出信号之前,延续正在运行。这两个任务没有错误,当延续开始时它们才刚刚开始。目的是前两个任务可以并行运行,但后续任务只能在它们都完成后运行。
我可能忽略了一些非常简单的事情,但据我所知,我正在遵循问题中建议的模式运行多个异步任务并等待它们全部完成。我意识到我可能可以省去,.ContinueWith()因为后面的代码Task.WhenAll()将隐式地成为延续,但我更喜欢保留显式的延续(除非它是我的问题的原因)。
private async Task MyMethod()
{
var tasks = new List<Task>
{
new Task(async () => await DoLongRunningTask1()),
new Task(async () => await DoLongRunningTask2())
};
Parallel.ForEach(tasks, async task => task.Start());
await Task.WhenAll(tasks)
.ContinueWith(async t =>{
//another long running bit of code with some parallel
//execution based on the results of the first two tasks
}
, TaskContinuationOptions.OnlyOnRanToCompletion);
}
private async Task DoLongRunningTask1()
{
... long running operation ...
}
private async Task DoLongRunningTask2() …Run Code Online (Sandbox Code Playgroud)