我想知道如果我捕获一个异常并将其传递给其他线程会发生什么情况。
try
{
//...
}
catch (Exception e)
{
for (int i = 0; i < 100; i++)
{
int currIndex = i;
Task.Run(() => e.Data[currIndex] = currIndex);
}
throw;
}
鉴于这些其他线程会更改异常的Data
属性的内容(该属性具有内部字典,请参见Reference Source),Data
词典会损坏吗?
查看Exception
的源代码会发现此字典不是线程安全的。
如果我的怀疑是真实的,后果是什么?我认为您永远不要在引发异常后更改Data
属性的内容,对吧?