gpt4 book ai didi

c# - 异步任务。运行不工作

转载 作者:行者123 更新时间:2023-11-30 20:01:10 25 4
gpt4 key购买 nike

我只是写了下面的代码,我希望在 C# 中有 3 个具有异步功能的文本文件,但我没有看到任何东西:

  private async void Form1_Load(object sender, EventArgs e)
{
Task<int> file1 = test();
Task<int> file2 = test();
Task<int> file3 = test();
int output1 = await file1;
int output2 = await file2;
int output3 = await file3;

}

async Task<int> test()
{
return await Task.Run(() =>
{
string content = "";
for (int i = 0; i < 100000; i++)
{
content += i.ToString();
}
System.IO.File.WriteAllText(string.Format(@"c:\test\{0}.txt", new Random().Next(1, 5000)), content);
return 1;
});
}

最佳答案

有几个潜在的问题:

  1. 是否c:\test\存在?否则,您会收到错误消息。
  2. 正如所写,您的 Random 对象可能会生成相同的数字,因为当前系统时间用作种子,并且您几乎在同一时间执行这些操作。您可以通过让他们共享 static Random 来解决此问题实例。编辑:but you need to synchronize the access to it somehow .我选择了一个简单的 lockRandom 上实例,这不是最快的,但适用于此示例。
  3. 建长string这种方式非常低效(例如,在 Debug模式下对我来说大约需要 43 秒,一次)。您的任务可能工作得很好,但您没有注意到它实际上在做任何事情,因为它需要很长时间才能完成。使用 StringBuilder 可以使它更快类(例如大约 20 毫秒)。
  4. (这不会影响它是否有效,但更像是一种风格)你不需要使用 asyncawait test() 中的关键字写的方法。它们是多余的,因为 Task.Run已经返回 Task<int> .

这对我有用:

private async void Form1_Load(object sender, EventArgs e)
{
Task<int> file1 = test();
Task<int> file2 = test();
Task<int> file3 = test();
int output1 = await file1;
int output2 = await file2;
int output3 = await file3;

}
static Random r = new Random();
Task<int> test()
{
return Task.Run(() =>
{
var content = new StringBuilder();
for (int i = 0; i < 100000; i++)
{
content.Append(i);
}
int n;
lock (r) n = r.Next(1, 5000);
System.IO.File.WriteAllText(string.Format(@"c:\test\{0}.txt", n), content.ToString());
return 1;
});
}

关于c# - 异步任务。运行不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19404539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com