Я пытаюсь воспроизвести ошибку потока в HTTP-обработчике.
По сути, рабочий процесс ASP.net создает 2 потока, которые одновременно запускают обработчик HTTP в моем приложении при загрузке определенной страницы.
Внутри обработчика http находится ресурс, который не является потокобезопасным.Следовательно, когда два потока пытаются получить к нему доступ одновременно, возникает исключение.
Я мог бы потенциально поместить оператор блокировки вокруг ресурса, однако я хочу убедиться, что это действительно так.Поэтому я хотел сначала создать ситуацию в консольном приложении.
Но я не могу получить 2 потока для одновременного выполнения метода, как это делает asp.net wp.Итак, мой вопрос, как вы можете создать 2 потока, которые могут выполнять метод одновременно.
Редактировать:
Базовым ресурсом является база данных SQL спользовательская таблица (имеет только столбец имени).Вот пример кода, который я попробовал.
[TestClass]
public class UnitTest1
{
[TestMethod]
public void Linq2SqlThreadSafetyTest()
{
var threadOne = new Thread(new ParameterizedThreadStart(InsertData));
var threadTwo = new Thread(new ParameterizedThreadStart(InsertData));
threadOne.Start(1); // Was trying to sync them via this parameter.
threadTwo.Start(0);
threadOne.Join();
threadTwo.Join();
}
private static void InsertData( object milliseconds )
{
// Linq 2 sql data context
var database = new DataClassesDataContext();
// Database entity
var newUser = new User {Name = "Test"};
database.Users.InsertOnSubmit(newUser);
Thread.Sleep( (int) milliseconds);
try
{
database.SubmitChanges(); // This statement throws exception in the HTTP Handler.
}
catch (Exception exception)
{
Debug.WriteLine(exception.Message);
}
}
}