微信小程序+.NET(十九) .NET多线程 控制执行顺序

  这次修改后台时,对切分好的plaintext请求科大讯飞tts接口时,一开始可能由于gap切的太大所以前几个text段没有生成成功,查看讯飞控制台也是未调用过接口,这里其实修改gap应该就可以直接出结果了,然后突然想到了多线程处理,网上查阅资料后,修改代码如下:

ArrayList sText = new ArrayList();
ArrayList sAbsolutePath = new ArrayList();
List<Task> sThread = new List<Task>();
//gap切分plaintext,放入sText列表
{
     sThread.Add( 
	     Task.Run(() =>
	     {
	         string audioName = CreateFileName(".wav");
	         string audioPath = System.IO.Path.Combine(filePath, audioName);
	         string resPath = "";
	         if (speeker != "")
	             resPath = Text2Audio(t, audioPath, speeker);
	         else
	             resPath = Text2Audio(t, audioPath);
	         sAbsolutePath.Add(audioPath);
	     })
     ); 
 }
 Task.WaitAll(sThread.ToArray());
 string mergeAudio = mergeAudios(sAbsolutePath, filePath);//合并音频

  处理后拼接起来的音频听到的顺序是混乱的,可知这些线程是同步的,怎么定义执行顺序?
  后来,查找资料找到了Task.Wait()等待task执行完毕,也就是直接在线程run起来之后等到它执行完毕为止再进行下一个循环,达到了我的要求。
  修改foreach{}内代码如下:

foreach (string t in sText)
{
    Task<string> task = Task<string>.Run(() =>
    {
        string audioName = CreateFileName(".wav");
        string audioPath = System.IO.Path.Combine(filePath, audioName);
        string resPath = "";
        if (speeker != "")
            resPath = Text2Audio(t, audioPath, speeker);
        else
            resPath = Text2Audio(t, audioPath);
        return resPath;
    });
    task.Wait();
    string res = task.Result;
    if (res != "")
        sAbsolutePath.Add(res);
}
//Task.WaitAll(sThread.ToArray());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值