private static async Task RunTest(CacheMetadataResolver resolver) { var tasks = new List <Task>(); int max = 10000; for (int i = 0; i < max; i++) { tasks.Add(Task.Run(() => { resolver.ResolveReference($"ref{i}", $"path", MetadataReferenceProperties.Assembly); })); } await Task.WhenAll(tasks); }
public async Task ResolveReference_IsThreadSafe() { var innerMock = new Mock <MetadataReferenceResolver>(); innerMock .Setup(m => m.ResolveReference(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MetadataReferenceProperties>())) .Returns(() => new[] { new TestRef() }.ToImmutableArray <PortableExecutableReference>()); var resolver = new CacheMetadataResolver(innerMock.Object); // We're testing a race condition, so run the test several times // to ensure it does not happen. for (int i = 0; i < 10; i++) { await RunTest(resolver); } }