【发布时间】:2014-06-06 22:55:38
【问题描述】:
假设我有一个 BlockingCollection OutputQueue,它有很多项目。目前我的代码是:
public void Consumer()
{
foreach (var workItem in OutputQueue.GetConsumingEnumerable())
{
PlayMessage(workItem);
Console.WriteLine("Works on {0}", workItem.TaskID);
OutLog.Write("Works on {0}", workItem.TaskID);
Thread.Sleep(500);
}
}
现在我希望PlayMessage(workItem) 以多任务方式运行,因为一些 workItem 需要更多时间,其他需要更少时间。差别很大。
至于方法PlayMessage(workItem),它有一些服务调用,播放文本到语音和一些日志记录。
bool successRouting = serviceCollection.SvcCall_GetRoutingData(string[] params, out ex);
bool successDialingService = serviceCollection.SvcCall_GetDialingServiceData(string[] params, out excep);
PlayTTS(workItem.TaskType); // playing text to speech
那么如何更改我的代码?
我的想法是:
public async Task Consumer()
{
foreach (var workItem in OutputQueue.GetConsumingEnumerable())
{
await PlayMessage(workItem);
Console.WriteLine("Works on {0}", workItem.TaskID);
OutLog.Write("Works on {0}", workItem.TaskID);
Thread.Sleep(500);
}
}
【问题讨论】:
-
澄清一下,您希望多个 TTS 操作同时进行吗?所以不同的线程会同时说不同的事情?
-
是的,有可能。这是一个电话应用程序。我们的客户在美国的不同地点。只要我们有足够的端口,同时玩TTS就可以了。比方说 AT&T,客户可以同时使用服务。
标签: c#-4.0 task-parallel-library async-await c#-5.0