【发布时间】:2016-10-11 12:33:43
【问题描述】:
我正在媒体服务 Azure 门户中启动 2 个频道。 启动一个频道需要很长时间才能完成,每个频道大约需要 25-30 秒。因此,多线程:)
但是,我不清楚以下内容:
我有两种方法:
public async Task<bool> StartAsync(string programName, CancellationToken token = default(CancellationToken))
{
var workerThreads = new List<Thread>();
var results = new List<bool>();
foreach (var azureProgram in _accounts.GetPrograms(programName))
{
var thread = new Thread(() =>
{
var result = StartChannelAsync(azureProgram).Result;
lock (results)
{
results.Add(result);
}
});
workerThreads.Add(thread);
thread.Start();
}
foreach (var thread in workerThreads)
{
thread.Join();
}
return results.All(r => r);
}
和
private async Task<bool> StartChannelAsync(IProgram azureProgram)
{
var state = _channelFactory.ConvertToState(azureProgram.Channel.State);
if (state == State.Running)
{
return true;
}
if (state.IsTransitioning())
{
return false;
}
await azureProgram.Channel.StartAsync();
return true;
}
在我使用的第一种方法中
var result = StartChannelAsync(azureProgram).Result;
在这种情况下,一切正常。但是如果我使用
var result = await StartChannelAsync(azureProgram);
不等待执行,我的结果有零条目。 我在这里错过了什么?
这是正确的方法吗?
感谢代码中的任何 cmets。我不是多线程之王;)
干杯!
【问题讨论】:
标签: c# multithreading azure asynchronous