Я пытаюсь определить, является ли мой код, который я использую, Thread Thread или нет. Я в основном пытаюсь вызывать метод несколько раз из разных потоков и фиксировать время, необходимое для выполнения определенных вызовов внутри метода.Thread Safe Method with Stop Watch
Вот пример того, что я делаю.
using System;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
namespace ThreadTest
{
class Program
{
static BlockingCollection<TimeSpan> Timer1 = new BlockingCollection<TimeSpan>(new ConcurrentBag<TimeSpan>());
static TimeSpan CaptureTime(Action action)
{
Stopwatch stopwatch = Stopwatch.StartNew();
action();
stopwatch.Stop();
return stopwatch.Elapsed;
}
static void ThreadFunction()
{
TimeSpan timer1 = new TimeSpan();
timer1 = CaptureTime(() =>
{
//Do Some Work
});
Timer1.Add(timer1);
}
static void Main(string[] args)
{
for (int i = 0; i < 50; i++)
{
var task = new Task(ThreadFunction);
task.Start();
}
}
}
}
И то, что я пытаюсь определить, может ли доверять значения TimeSpan, возвращаемые методом CaptureTime.
Спасибо всем, кто может просветить меня.
Кроме того, вопросы такого характера лучше поставлены на [codereview.stackexchange.com] (http://codereview.stackexchange.com/) –
+1. О предложениях по улучшению практики секундомера. Не согласен с 'List' list-list не является потокобезопасным для добавления из нескольких потоков, поэтому его нельзя использовать в этом контексте. Также я бы не согласился, если этот вопрос лучше для codereview. Для меня это четко говорит о том, «если конкретный шаблон кодирования является потокобезопасным», без особого беспокойства, как написана остальная часть кода - SO считает нужным. –
Если он использовал 'List', ему нужно было бы заблокировать его, чтобы добавить к нему. –