将线程更改为异步等待模板好吗?

时间:2019-04-30 18:09:52

标签: multithreading async-await

前段时间我遇到了一个任务,如下所述,该项目使用.net 4.0,现在我想知道如果存在这种可能性,在这种情况下使用async-await是否会很好(该方法运行代表应下载大量文件)。我读过许多不同的文章来阐明自己的好奇心,但不确定自己的想法是否刻板。

 public static void StartBackgroundThread(ParameterizedThreadStart 
        threadstart, string name = "", object parameter = null)
    {
        if (ConcQueue.Count == 0)
        {
            ConcQueue.Enqueue(threadstart);
        }
        else
        {
            foreach (var element in ConcQueue)
            {
                if (element.Method.Name == threadstart.Method.Name)
                {
                    return;
                }
            }
        }

        if (!HasBackgroundThread)
        {
            HasBackgroundThread = true;
            try
            {
                ParameterizedThreadStart result;
                ConcQueue.TryDequeue(out result);
                _backgroundThread = new Thread(result) { Name = name };
               _backgroundThread.Start(parameter);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }

您如何根据线程\异步来重构这段代码?会吗并且使用async-await还是线程会更好?

1 个答案:

答案 0 :(得分:0)

  

您如何根据线程\异步来重构这段代码?你愿意吗?

我将重构使用的代码。这段代码与Thread类型紧密相关,并且如果不重写调用代码就很难重写。

  

使用异步等待或线程更好吗?

async和线程完全不同。 Thread类型本身已经过时,对于COM互操作以外的所有用例,应使用更现代的方法(Parallel,线程池等)来代替。是否使用async还是并行/线程池的问题取决于您要尝试执行的操作。任何受CPU约束的对象都可以使用并行/线程池,而受I / O约束的操作则使用async