c# выполнить 2 потока одновременно
Я пытаюсь воспроизвести условие ошибки потока в обработчике HTTP.
В основном, ASP.net рабочий procecss создает 2 потока, которые вызывают обработчик HTTP в моем приложении одновременно, когда загружается определенная страница.
Внутри обработчика http находится ресурс, который не является потокобезопасным. Следовательно, когда 2 потока пытаются получить к нему доступ одновременно, возникает исключение.
Потенциально я мог бы поместить оператор блокировки вокруг ресурса, однако я хочу убедитесь, что это действительно так. Поэтому я хотел сначала создать ситуацию в консольном приложении.
Но я не могу получить 2 потока для выполнения метода одновременно, как asp.net wp-да. Итак, мой вопрос заключается в том, как вы можете создать 2 потока, которые могут выполнять метод одновременно.
Редактировать:
Базовым ресурсом является база данных sql с пользовательской таблицей (имеет только столбец name). Вот пример кода, который я попробовал.
[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);
}
}
}
1 ответ:
Вы можете просто установить статическое время, чтобы начать свою работу вот так.
private static DateTime startTime = DateTime.Now.AddSeconds(5); //arbitrary start time static void Main(string[] args) { ThreadStart threadStart1 = new ThreadStart(DoSomething); ThreadStart threadStart2 = new ThreadStart(DoSomething); Thread th1 = new Thread(threadStart1); Thread th2 = new Thread(threadStart2); th1.Start(); th2.Start(); th1.Join(); th2.Join(); Console.ReadLine(); } private static void DoSomething() { while (DateTime.Now < startTime) { //do nothing } //both threads will execute code here concurrently }
Comments