本文整理汇总了C#中System.Threading.Barrier类的典型用法代码示例。如果您正苦于以下问题:C# Barrier类的具体用法?C# Barrier怎么用?C# Barrier使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Barrier类属于System.Threading命名空间,在下文中一共展示了Barrier类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: DownloadAllTreatmentImages
/// <summary>
/// Download all the images for the current session
/// </summary>
public void DownloadAllTreatmentImages()
{
Barrier barrier = new Barrier(_patient.PatientTreatment.TrainingList.Count + 2);
Task treatmentThread = new Task(() =>
{
//Downloading all thumbs in treatment
DownloadTreatment();
barrier.SignalAndWait();
});
treatmentThread.Start();
foreach(Training t in _patient.PatientTreatment.TrainingList)
{
Task tt = new Task(() =>
{
DownloadTraining(_patient.PatientTreatment.TrainingList.IndexOf(t));
barrier.SignalAndWait();
});
tt.Start();
}
barrier.SignalAndWait();
barrier.Dispose();
}
开发者ID:amirben,项目名称:VideoTherapy,代码行数:30,代码来源:DownloadCache.cs
示例2: Main
public void Main()
{
barrier = new Barrier(3);
new Thread(Speak).Start("A");
new Thread(Speak).Start("B");
new Thread(Speak).Start("C");
}
开发者ID:simonlaroche,项目名称:DumpingGrounds,代码行数:7,代码来源:BarrierSample.cs
示例3: RoutePeerMessages
private void RoutePeerMessages(CancellationToken token, Barrier gateway)
{
try
{
using (var scaleOutFrontend = CreateScaleOutFrontendSocket())
{
var localSocketIdentity = localSocketIdentityPromise.Task.Result;
gateway.SignalAndWait(token);
while (!token.IsCancellationRequested)
{
try
{
var message = (Message) scaleOutFrontend.ReceiveMessage(token);
if (message != null)
{
message.SetSocketIdentity(localSocketIdentity);
scaleOutFrontend.SendMessage(message);
messageTracer.ReceivedFromOtherNode(message);
}
}
catch (Exception err)
{
logger.Error(err);
}
}
}
}
catch (Exception err)
{
logger.Error(err);
}
}
开发者ID:gitter-badger,项目名称:kino,代码行数:34,代码来源:MessageRouter.cs
示例4: Main
static void Main()
{
const int numberTasks = 2;
const int partitionSize = 1000000;
var data = new List<string>(FillData(partitionSize * numberTasks));
var barrier = new Barrier(numberTasks + 1);
var taskFactory = new TaskFactory();
var tasks = new Task<int[]>[numberTasks];
for (int i = 0; i < numberTasks; i++)
{
tasks[i] = taskFactory.StartNew<int[]>(CalculationInTask,
Tuple.Create(i, partitionSize, barrier, data));
}
barrier.SignalAndWait();
var resultCollection = tasks[0].Result.Zip(tasks[1].Result, (c1, c2) =>
{
return c1 + c2;
});
char ch = 'a';
int sum = 0;
foreach (var x in resultCollection)
{
Console.WriteLine("{0}, count: {1}", ch++, x);
sum += x;
}
Console.WriteLine("main finished {0}", sum);
Console.WriteLine("remaining {0}, phase {1}", barrier.ParticipantsRemaining, barrier.CurrentPhaseNumber);
}
开发者ID:ChegnduJackli,项目名称:Projects,代码行数:34,代码来源:Program.cs
示例5: TestEtw
public void TestEtw()
{
using (var listener = new TestEventListener("System.Threading.Tasks.Parallel.EventSource", EventLevel.Verbose))
{
var events = new ConcurrentQueue<int>();
listener.RunWithCallback(ev => events.Enqueue(ev.EventId), () => {
Parallel.For(0, 10000, i => { });
var barrier = new Barrier(2);
Parallel.Invoke(
() => barrier.SignalAndWait(),
() => barrier.SignalAndWait());
});
const int BeginLoopEventId = 1;
const int BeginInvokeEventId = 3;
Assert.Equal(expected: 1, actual: events.Count(i => i == BeginLoopEventId));
Assert.Equal(expected: 1, actual: events.Count(i => i == BeginInvokeEventId));
const int EndLoopEventId = 2;
const int EndInvokeEventId = 4;
Assert.Equal(expected: 1, actual: events.Count(i => i == EndLoopEventId));
Assert.Equal(expected: 1, actual: events.Count(i => i == EndInvokeEventId));
const int ForkEventId = 5;
const int JoinEventId = 6;
Assert.True(events.Count(i => i == ForkEventId) >= 1);
Assert.Equal(events.Count(i => i == ForkEventId), events.Count(i => i == JoinEventId));
}
}
开发者ID:johnhhm,项目名称:corefx,代码行数:30,代码来源:EtwTests.cs
示例6: RunContext
public RunContext( RunContextParam parameters )
{
GrandOutput = CreateGrandOutputWithFakeHandler( parameters.HandlerExtraLoad, parameters.UseLocalTestStrategy, parameters.DispatcherMaxCapacity );
LoopCount = parameters.LoopCount;
Barrier = new Barrier( parameters.PoolThreadCount + parameters.NewThreadCount + 1 );
_newThreadCount = parameters.NewThreadCount;
}
开发者ID:Invenietis,项目名称:ck-core,代码行数:7,代码来源:StressTests.cs
示例7: TwoInstanceDependentMethodsInvoked_Exception
public void TwoInstanceDependentMethodsInvoked_Exception()
{
SingleThreadedMethodsObject o1 = new SingleThreadedMethodsObject();
Barrier barrier = new Barrier(2);
TestHelpers.InvokeSimultaneouslyAndWait(() => o1.InstanceDependentMethod(barrier), () => o1.InstanceDependentMethod2(barrier));
}
开发者ID:olachan,项目名称:PostSharp-Toolkits,代码行数:7,代码来源:ThreadUnsafeTests.cs
示例8: Test_ClearDeadThreads
public void Test_ClearDeadThreads()
{
//---------------Set up test pack-------------------
const int BarrierTimeout = 10000;
var dataAccessorMain = new DataAccessorInMemory();
var dataAccessor = new DataAccessorThreadSplitter(dataAccessorMain);
var expectedDataAccessorForThread = new DataAccessorInMemory();
using (var entryBarrier = new Barrier(2))
using (var exitBarrier = new Barrier(2))
{
var thread = new Thread(() =>
{
dataAccessor.AddDataAccessorForThread(expectedDataAccessorForThread);
entryBarrier.SignalAndWait(BarrierTimeout);
exitBarrier.SignalAndWait(BarrierTimeout);
});
thread.Start();
entryBarrier.SignalAndWait(BarrierTimeout);
//---------------Assert preconditions---------------
Assert.AreSame(expectedDataAccessorForThread, dataAccessor.GetDataAccessorForThread(thread));
//---------------Execute Test ----------------------
exitBarrier.SignalAndWait(BarrierTimeout);
thread.Join();
dataAccessor.ClearDeadThreads();
//---------------Test Result -----------------------
var exception = Assert.Throws<HabaneroDeveloperException>(() => dataAccessor.GetDataAccessorForThread(thread));
StringAssert.Contains("Data accessor for thread does not exist", exception.Message);
}
}
开发者ID:Chillisoft,项目名称:habanero,代码行数:29,代码来源:TestDataAccessorThreadSplitter.cs
示例9: SimpleLock_WhenDeadlocked_Throws
public void SimpleLock_WhenDeadlocked_Throws()
{
object lock1 = new object();
object lock2 = new object();
Barrier barrier = new Barrier(2);
Action t1 = () =>
{
lock (lock1)
{
barrier.SignalAndWait();
lock (lock2)
{
Thread.Sleep(100);
}
}
};
Action t2 = () =>
{
lock (lock2)
{
barrier.SignalAndWait();
lock (lock1)
{
Thread.Sleep(100);
}
}
};
TestHelpers.InvokeSimultaneouslyAndWaitForDeadlockDetection(t1, t2);
}
开发者ID:olachan,项目名称:PostSharp-Toolkits,代码行数:31,代码来源:DetectDeadlocksTests.cs
示例10: Test_WithThread
public void Test_WithThread()
{
//---------------Set up test pack-------------------
const int BarrierTimeout = 10000;
var dataAccessorMain = new DataAccessorInMemory();
var dataAccessor = new DataAccessorThreadSplitter(dataAccessorMain);
var expectedDataAccessorForThread = new DataAccessorInMemory();
using (var entryBarrier = new Barrier(2))
using (var exitBarrier = new Barrier(2))
{
var thread = new Thread(() =>
{
dataAccessor.AddDataAccessorForThread(expectedDataAccessorForThread);
entryBarrier.SignalAndWait(BarrierTimeout);
exitBarrier.SignalAndWait(BarrierTimeout);
});
thread.Start();
entryBarrier.SignalAndWait(BarrierTimeout);
//---------------Execute Test ----------------------
var dataAccessorForThread = dataAccessor.GetDataAccessorForThread(thread);
exitBarrier.SignalAndWait(BarrierTimeout);
//---------------Test Result -----------------------
Assert.AreSame(expectedDataAccessorForThread, dataAccessorForThread);
}
}
开发者ID:Chillisoft,项目名称:habanero,代码行数:25,代码来源:TestDataAccessorThreadSplitter.cs
示例11: Construct_GivenSemaphoreSlim_ShouldLockIt
public void Construct_GivenSemaphoreSlim_ShouldLockIt()
{
//---------------Set up test pack-------------------
using (var semaphore = new SemaphoreSlim(1))
{
bool? gotLock = null;
//---------------Assert Precondition----------------
using (new LenientAutoLocker(semaphore))
{
var barrier = new Barrier(2);
Task.Run(() =>
{
barrier.SignalAndWait();
Thread.Sleep(1000);
// ReSharper disable once AccessToDisposedClosure
gotLock = semaphore.Wait(100);
});
//---------------Execute Test ----------------------
barrier.SignalAndWait();
Thread.Sleep(2000);
//---------------Test Result -----------------------
Assert.IsNotNull(gotLock);
Assert.IsFalse(gotLock.Value);
}
}
}
开发者ID:Chillisoft,项目名称:splunk4net,代码行数:27,代码来源:TestLenientAutoLocker.cs
示例12: ParticleThreadManager
public ParticleThreadManager()
{
particleThread = new Thread(new ThreadStart(Run));
running = true;
barrier = new Barrier(2);
debugStrings = new List<List<string>>();
}
开发者ID:pampersrocker,项目名称:STAR,代码行数:7,代码来源:ParticleThreadManager.cs
示例13: Barrier
public async Task When_simultaneous_reservations_are_placed_for_one_of_a_fixed_quantity_of_a_resource_then_different_values_are_reserved()
{
//arrange
var barrier = new Barrier(2);
var reservationService = new SqlReservationService(() => new ReservationServiceDbContextThatForcesConcurrencyDuringSave(barrier));
// given a fixed quantity of some resource, e.g. promo codes:
var promoCode = "promo-code-" + Any.Word();
var reservedValue1 = "firstValue:" + Any.CamelCaseName();
var reservedValue2 = "SecondValue:" + Any.CamelCaseName();
await reservationService.Reserve(reservedValue1, promoCode, Any.CamelCaseName(), TimeSpan.FromDays(-1));
await reservationService.Reserve(reservedValue2, promoCode, Any.CamelCaseName(), TimeSpan.FromDays(-1));
//act
var result = await reservationService.ReserveAny(
scope: promoCode,
ownerToken: Any.FullName(),
lease: TimeSpan.FromMinutes(2),
confirmationToken: Any.CamelCaseName());
var result2 = await reservationService.ReserveAny(
scope: promoCode,
ownerToken: Any.FullName(),
lease: TimeSpan.FromMinutes(2),
confirmationToken: Any.CamelCaseName());
//assert
result.Should().NotBe(result2);
}
开发者ID:charlesmccarthyirl,项目名称:Its.Cqrs,代码行数:30,代码来源:SqlReservationServiceTests.cs
示例14: RegisterActors
private void RegisterActors(CancellationToken token, Barrier gateway)
{
try
{
using (var socket = CreateOneWaySocket())
{
var localSocketIdentity = localSocketIdentityPromise.Task.Result;
gateway.SignalAndWait(token);
foreach (var actor in actorRegistrationsQueue.GetConsumingEnumerable(token))
{
try
{
var registrations = actorHandlerMap.Add(actor);
SendActorRegistrationMessage(socket, localSocketIdentity, registrations);
}
catch (Exception err)
{
logger.Error(err);
}
}
}
}
finally
{
actorRegistrationsQueue.Dispose();
}
}
开发者ID:gitter-badger,项目名称:kino,代码行数:28,代码来源:ActorHost.cs
示例15: Main
static void Main(string[] args)
{
// create a barrier
Barrier barrier = new Barrier(2);
// create a task that will complete
Task.Factory.StartNew(() => {
Console.WriteLine("Good task starting phase 0");
barrier.SignalAndWait();
Console.WriteLine("Good task starting phase 1");
barrier.SignalAndWait();
Console.WriteLine("Good task completed");
});
// create a task that will throw an exception
// with a selective continuation that will reduce the
// particpant count in the barrier
Task.Factory.StartNew(() => {
Console.WriteLine("Bad task 1 throwing exception");
throw new Exception();
}).ContinueWith(antecedent => {
// reduce the particpant count
Console.WriteLine("Reducing the barrier participant count");
barrier.RemoveParticipant();
}, TaskContinuationOptions.OnlyOnFaulted);
// wait for input before exiting
Console.WriteLine("Press enter to finish");
Console.ReadLine();
}
开发者ID:clp-takekawa,项目名称:codes-from-books,代码行数:31,代码来源:Listing_13.cs
示例16: RunBarrierTest1_ctor
/// <summary>
/// Testing Barrier constructor
/// </summary>
/// <param name="initialCount">The intial barrier count</param>
/// <param name="exceptionType">Type of the exception in case of invalid input, null for valid cases</param>
/// <returns>Tru if the test succeeded, false otherwise</returns>
private static bool RunBarrierTest1_ctor(int initialCount, Type exceptionType)
{
TestHarness.TestLog("Barrier(" + initialCount + ")");
Exception exception = null;
try
{
Barrier b = new Barrier(initialCount);
if (b.ParticipantCount != initialCount)
{
TestHarness.TestLog("Constructor failed, ParticipantCount doesn't match the initialCount.");
return false;
}
}
catch (Exception ex)
{
exception = ex;
}
if (exception != null && exceptionType == null)
{
TestHarness.TestLog("Constructor failed, unexpected exception has been thrown.");
return false;
}
if (exception != null && !Type.Equals(exceptionType, exception.GetType()))
{
TestHarness.TestLog("Constructor failed, exceptions types do not match.");
return false;
}
TestHarness.TestLog("Constructor succeeded");
return true;
}
开发者ID:modulexcite,项目名称:IL2JS,代码行数:37,代码来源:BarrierTests.cs
示例17: TypeDependentStaticMethodInvokedTwice_Exception
public void TypeDependentStaticMethodInvokedTwice_Exception()
{
Barrier barrier = new Barrier(2);
TestHelpers.InvokeSimultaneouslyAndWait(() => SingleThreadedStaticMethodsObject.StaticTypeDependentMethod(barrier),
() => SingleThreadedStaticMethodsObject.StaticTypeDependentMethod(barrier));
}
开发者ID:olachan,项目名称:PostSharp-Toolkits,代码行数:7,代码来源:ThreadUnsafeTests.cs
示例18: CalculatePrimesParallelWithSeparateList
private static int[] CalculatePrimesParallelWithSeparateList(int range)
{
var results = new List<int>();
var b = new Barrier(Environment.ProcessorCount + 1);
for (var core = 0; core < Environment.ProcessorCount; ++core)
{
var coreX = core;
ThreadPool.QueueUserWorkItem((o) =>
{
var threadResults = new List<int>();
for (var number = 3 + coreX; number < range; number += Environment.ProcessorCount)
{
var foundPrime = true;
for (var divisor = 2; divisor * divisor <= number; divisor++)
if (number % divisor == 0)
foundPrime = false;
if (foundPrime)
{
threadResults.Add(number);
}
}
lock (results)
{
results.AddRange(threadResults);
}
b.SignalAndWait();
});
}
b.SignalAndWait();
return results.ToArray();
}
开发者ID:Laubeee,项目名称:ecnf,代码行数:33,代码来源:Program.cs
示例19: TestPoolContention
public void TestPoolContention()
{
var barrier = new Barrier(N);
var tasks = new Task[N];
var totalTimesAcquired = 0;
Assert.AreEqual(pool.maxThingId, 0);
for (int i = 0; i < N; i++)
{
var t = Task.Run(() => {
barrier.SignalAndWait(); // Takes time for all threads to spin up
for (int j = 0; j < 128; j++)
{
using (var pooled = pool.GetAsync().Result) // blocks
{
Interlocked.Increment(ref totalTimesAcquired);
}
}
});
tasks[i] = t; // These N tasks do not yield their thread
}
Task.WaitAll(tasks);
Assert.AreEqual(PoolSize, pool.maxThingId);
Assert.AreEqual(PoolSize, pool.CurrentFreeCount);
Assert.AreEqual(PoolSize, pool.CurrentPoolSize);
Assert.AreEqual(N * 128, totalTimesAcquired);
}
开发者ID:CubeCoders,项目名称:mHttp,代码行数:31,代码来源:LazyPoolMultiThreadTests.cs
示例20: CancelAfterWait
public static bool CancelAfterWait()
{
TestHarness.TestLog("* BarrierCancellationTests.CancelAfterWait()");
bool passed = true;
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken cancellationToken = cancellationTokenSource.Token;
const int numberParticipants = 3;
Barrier barrier = new Barrier(numberParticipants);
ThreadPool.QueueUserWorkItem(
(args) =>
{
Thread.Sleep(1000);
cancellationTokenSource.Cancel();
}
);
//Now wait.. the wait should abort and an exception should be thrown
passed &= TestHarnessAssert.EnsureOperationCanceledExceptionThrown(
() => barrier.SignalAndWait(cancellationToken),
cancellationToken, "An OCE(null) should have been thrown that references the cancellationToken.");
//Test that backout occured.
passed &= TestHarnessAssert.AreEqual(numberParticipants, barrier.ParticipantsRemaining,
"All participants should remain as the current one should have backout out its signal");
// the token should not have any listeners.
// currently we don't expose this.. but it was verified manually
return passed;
}
开发者ID:modulexcite,项目名称:IL2JS,代码行数:33,代码来源:BarrierCancellationTests.cs
注:本文中的System.Threading.Barrier类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论