我通过lambda表达式创建了一批匿名函数。我想使用TaskId来区分匿名函数。 下面是代码:这是由C#编译器完成的优化吗?
int count = 3;
int i;
for (int j = 0; j < 10; j++)
{
i = 0;
Func<bool, Task<int>> func = async (b) =>
{
return j;
};
while (i++ < count)
{
var task = func(true);
Console.WriteLine(String.Format("Task Result:{0} TaskId:{1}",
task.Result, task.Id));
}
}
这里是输出
Task Result:0 TaskId:1
Task Result:0 TaskId:1
Task Result:0 TaskId:1
Task Result:1 TaskId:2
Task Result:1 TaskId:2
Task Result:1 TaskId:2
Task Result:2 TaskId:3
Task Result:2 TaskId:3
Task Result:2 TaskId:3
Task Result:3 TaskId:4
Task Result:3 TaskId:4
Task Result:3 TaskId:4
Task Result:4 TaskId:5
Task Result:4 TaskId:5
Task Result:4 TaskId:5
Task Result:5 TaskId:6
Task Result:5 TaskId:6
Task Result:5 TaskId:6
Task Result:6 TaskId:7
Task Result:6 TaskId:7
Task Result:6 TaskId:7
Task Result:7 TaskId:8
Task Result:7 TaskId:8
Task Result:7 TaskId:8
Task Result:8 TaskId:9
Task Result:8 TaskId:9
Task Result:8 TaskId:9
Task Result:9 TaskId:10
Task Result:9 TaskId:11
Task Result:9 TaskId:12
正如你所看到的,改变的taskid因为结果是大于8我不知道到知道这样做的原因现象。感谢您的帮助:)
有趣的是,从我可以告诉它重用任务实例(object.ReferenceEquals在比较'task'到上一个值时为true)一段时间,但它不清楚为什么。 – 2014-10-20 04:30:23
@mikez是的。但我不知道为什么返回值会影响重用。 – 2014-10-20 05:09:32
任务正在缓存某处。在连续两次的方法中运行该代码。对于<= 8,相同的任务id会重复,但在此之上它们是新的。 – 2014-10-20 05:17:56