【问题标题】:task.result.count , Task [closed]task.result.count ,任务[关闭]
【发布时间】:2021-10-26 06:32:25
【问题描述】:

我只是想知道 task.result.length 和直接使用属性有什么区别。

所以我有这个:

int count = 20000;
char charToconcatnate = '1';

Task<string> task = Task.Factory.StartNew(() => ConcatChars(charToconcatnate, count));
Console.WriteLine("IN progress");
task.Wait();

Console.WriteLine("Completed");
Console.WriteLine("The length of the result is:" + task.Result.Length);
Console.Read();


public static string ConcatChars(char charToConcanate, int count)
{
    string concateneatedString = string.Empty;

    for (int i = 0; i < count; i++)
    {
        concateneatedString += charToConcanate;
    }           
    return concateneatedString;
}            

但如果我这样做:

int count = 20000;
char charToconcatnate = '1';

Task task = Task.Factory.StartNew(() => ConcatChars(charToconcatnate, count));
Console.WriteLine("IN progress");
task.Wait();

Console.WriteLine("Completed");
Console.WriteLine("The length of the result is:" + count);
Console.Read();


public static string ConcatChars(char charToConcanate, int count)
{
    string concateneatedString = string.Empty;

    for (int i = 0; i < count; i++)
    {
        concateneatedString += charToConcanate;
    }           
    return concateneatedString;
}            

两者的输出是一样的。

那么有什么区别呢?

【问题讨论】:

  • 没有minimal reproducible example 是不可能的(即知道ConcatChars 做了什么)。
  • 简短的回答是第二个代码块没有意义。 无论ConcatChars 做了什么,输出都是相同的。第一个代码块实际上是检查ConcatChars的输出。这就像把我的孩子送到商店并说“买 144 个鸡蛋”,然后当他们回来时宣布我有 144 个鸡蛋而不看他买了什么
  • 我编辑了我的问题。那为什么还是-1???对不起,但它不是这样工作的

标签: c# multithreading task


【解决方案1】:

task.Result 是一个 20,000 个字符长的字符串。所以task.Result.Length 返回20000

count 也返回 20000。 (这就是导致 task.Result 首先是 20,000 个字符的原因!)

两个输出是相同的,因为它们为字符串连接获得了相同的值 (20000)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多