Сбой моего приложения asp.net webapi, когда я звоню неуправляемой dll из нескольких потоков, созданных бомбардировкой запросов.У меня нет доступа к источнику DLL, и DLL не является потокобезопасным.
Приложение работает нормально, когда запросы выполняются последовательно, но становится нестабильным, когда несколько запросов выполняются параллельно.
Мое решение до сих пор заключалось в том, чтобы попытаться, если неудачная пауза в течение короткого периода времени, повторить попытку.Кажется, это работает, но я считаю, что должен быть лучший способ с мьютексами или с Windows API, или каким-то другим неизвестным мне решением.
Пример моего кода:
public class CDFReader : IDisposable
{
public CDFReader(string path)
{
// open cdf file using dll
}
// other cdf extraction methods exist that require the dll
}
public class SomeOtherClass
{
// function call to CDFReader that gets called from
// multiple request threads
public Records GetRecords()
{
using (var cdf = CDFReader(somefilepath))
{
// extract data from cdf using CDFReader methods
}
}
}
В настоящее время я исправляю свою проблему, включив блок using в попытку неудачного ожидания, но хотел бы заблокировать его из CDFReader.Таким образом, все, что делается с помощью CDFReader, обрабатывается автоматически, а не блокируется вокруг блока using.
Я открыт для любых предложений.