Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }