我在回调和 for 循环方面遇到了一些问题, 说我有这个代码
public void DoSth(Action<QueryTextureResult> result, IEnumerable<string> arr)
{
int totalData = 0;
foreach (var element in arr) // let's say arr.Count() is 10
{
Action<Texture> onImageReceived = (texture) =>
{
if (result != null)
{
var res = new QueryTextureResult()
{
Texture = texture,
QueryId = queryId,
Index = totalData // why this one is always 10 if the callback takes time?
};
result(res);
Debug.Log("INdex: " + res.Index);
}
};
imageManager.GetImage("http://image.url", onImageReceived);
totalData++;
}
}
正如评论中所写,如果我有10个元素,调用result
需要时间,为什么我收到的QueryTextureResult.Index
总是10 ?是通过引用传递的吗?有办法解决这个问题吗?
最佳答案
发生这种情况是因为 totalData
已关闭,并且 onImageReceived
将被异步调用。
假设你有3个项目,它可能会按以下顺序执行:
onImageReceived
为项目 1 声明,输出totalData
- 为项目 1 调用
GetImage
总数据 = 1
onImageReceived
为第 2 项声明,输出totalData
GetImage
为项目 2 调用总数据 = 2
onImageReceived
为第 3 项声明,输出totalData
- 为第 3 项调用
GetImage
总数据 = 3
- 第 1 项已完成,它调用
onImageReceived
事件,该事件输出totalData
...现在为 3 - 第 2 项已完成,它调用
onImageReceived
事件,并且totalData
也为 3 - 第 3 项相同
关于C# 整数作为回调中的引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40276079/