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);
}
}
}
485   1  

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

    Ничего не найдено.