因此,我有一个用例,我想将对象传递给同时工作的异步函数。每个函数都会更新对象的不同独立部分。所以,我怀疑这会导致列表出现并发问题吗?
class Error
{
public object fieldA;
public object fieldB;
public object fieldC;
}
var error = new Error();
var awaitedTasks = new List<Task>();
awaitedTasks.Add(funcA(error)); // this async function will update only fieldA
awaitedTasks.Add(funcB(error)); // this async function will update only fieldB
awaitedTasks.Add(funcC(error)); // this async function will update only fieldC
await Task.WhenAll(awaitedTasks);
private async Task funcA(Error error)
{
error.fieldA = await FetchAFromDbAsync();
}
private async Task funcB(Error error)
{
error.fieldB = await FetchBFromDbAsync();
}
private async Task funcC(Error error)
{
error.fieldC = await FetchCFromDbAsync();
}
因此,添加更多上下文,这里我们在不同函数中丰富错误的不同字段。
为了真正确定,您应该向我们展示这三种方法的真正作用。我假设一些简单的代码如下:
private async Task funcA(Error error)
{
await Task.Delay(1000);
error.fieldA = "funcA finished";
}
private async Task funcB(Error error)
{
await Task.Delay(1000);
error.fieldB = "funcB finished";
}
private async Task funcC(Error error)
{
await Task.Delay(1000);
error.fieldC = "funcC finished";
}
这样的话,你就安全了。但如果这些方法访问共享变量,您可能会遇到一些麻烦。但这只有看到你完整的代码才能判断。