相关疑难解决方法(0)

等待成千上万的任务

我有一个应用程序,通常有1.000 - 30.000文件转换一些数据.

我需要做3个步骤:

  1. 复制一个文件(替换那里的一些文字)
  2. 使用WebClient创建Webrequest以下载文件(我将复制的文件发送到WebServer,将文件转换为另一种格式)
  3. 获取下载的文件并更改部分内容

所以这三个步骤包括一些I/O,我使用了async/await方法:

var tasks = files.Select(async (file) =>
{
    Item item = await createtempFile(file).ConfigureAwait(false);
    await convert(item).ConfigureAwait(false);
    await clean(item).ConfigureAwait(false);
}).ToList();

await Task.WhenAll(tasks).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

我不知道这是否是最好的做法,因为我创造了超过一千个任务.我想过将这三个步骤拆分为:

List<Item> items = new List<Item>();
var tasks = files.Select(async (file) =>
{
    Item item = await createtempFile(file, ext).ConfigureAwait(false);
    lock(items)
        items.Add(item);
}).ToList();

await Task.WhenAll(tasks).ConfigureAwait(false);

var tasks = items.Select(async (item) =>
{
    await convert(item, baseAddress, ext).ConfigureAwait(false);
}).ToList();

await Task.WhenAll(tasks).ConfigureAwait(false);

var tasks = items.Select(async (item) =>
{
    await clean(targetFile, item.Doctype, ext).ConfigureAwait(false);
}).ToList();

await Task.WhenAll(tasks).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

但这似乎没有更好或更快,因为我创造了数千次任务. …

c# asynchronous async-await

2
推荐指数
2
解决办法
1236
查看次数

标签 统计

async-await ×1

asynchronous ×1

c# ×1