Are async methods that call RhinoCommon threadsafe?
For example, if I iterate through a list of BrepFace’s and evaluate their edges (e.g. obtain their Concavity) and store the curve geometry in a list, should I expect consistent results?
I have a very strange and intermittent bug in my application where I get random results. Code snippet below. Do I need to put a lock on the ResultContainer list?
private protected override Task AnalyzeTask(Dispatcher dispatcher)
{
var task = Task.Run(() =>
{
foreach (var brep in _brepMerger.Breps)
{
var edges = brep.Edges;
foreach (var edge in edges)
{
if (_edgeAnalysisRule.IsUnsupported(edge, out var warningInfo) == false) continue;
var analysisResult = new AnalysisWarningResult(edge.EdgeCurve, warningInfo);
dispatcher.Invoke(() => this.ResultContainer.AddResult(analysisResult));
}
}
});
return task;
}
public async Task AnalyzeAsync(Dispatcher dispatcher)
{
this.IsRunning = true;
await _brepMerger.Initialization;
dispatcher.Invoke(this.ResultContainer.ClearResults);
await AnalyzeTask(dispatcher);
}