前段时间我遇到了一个任务,如下所述,该项目使用.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还是线程会更好?
答案 0 :(得分:0)
您如何根据线程\异步来重构这段代码?你愿意吗?
我将重构使用的代码。这段代码与Thread
类型紧密相关,并且如果不重写调用代码就很难重写。
使用异步等待或线程更好吗?
async
和线程完全不同。 Thread
类型本身已经过时,对于COM互操作以外的所有用例,应使用更现代的方法(Parallel
,线程池等)来代替。是否使用async
还是并行/线程池的问题取决于您要尝试执行的操作。任何受CPU约束的对象都可以使用并行/线程池,而受I / O约束的操作则使用async
。