本文整理汇总了C#中Channel.Publish方法的典型用法代码示例。如果您正苦于以下问题:C# Channel.Publish方法的具体用法?C# Channel.Publish怎么用?C# Channel.Publish使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Channel
的用法示例。
在下文中一共展示了Channel.Publish方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ShouldCompletelyClearPendingActionsBeforeExecutingNewActions
public void ShouldCompletelyClearPendingActionsBeforeExecutingNewActions()
{
var msgs = new List<int>();
var sut = new StubFiber { ExecutePendingImmediately = true };
var channel = new Channel<int>();
const int count = 4;
channel.Subscribe(sut, delegate(int x)
{
if (x == count)
{
return;
}
channel.Publish(x + 1);
msgs.Add(x);
});
channel.Publish(0);
Assert.AreEqual(count, msgs.Count);
for (var i = 0; i < msgs.Count; i++)
{
Assert.AreEqual(i, msgs[i]);
}
}
示例2: TestTailWithExampleLog
public void TestTailWithExampleLog()
{
File.Delete("test.log");
var tailfiber = new PoolFiber();
var reset = new AutoResetEvent(false);
using (var tail = new Tail())
{
var tailchannel = new Channel<string>();
tailchannel.Subscribe(tailfiber, str =>
{
tail.OutputRecievedEvent += OnOutputRecievedEvent;
tail.Start("test.log");
});
tailfiber.Start();
using (var testlog = new CreateTestLog("test.log"))
{
tailchannel.Publish("");
testlog.StartWritingToTestLog(10);
testlog.Stop(); //don't really need to call this, but heh, what the...
}
tail.Stop();
while(tail.State != TailState.Stopped){/*wait for tail to stop*/}
}
File.Delete("test.log");
}
示例3: PointToPointPerfTestWithInt
public void PointToPointPerfTestWithInt()
{
var executor = new BoundedQueue(new PerfExecutor()) { MaxDepth = 10000, MaxEnqueueWaitTimeInMs = 1000 };
using (var fiber = new ThreadFiber(executor))
{
fiber.Start();
var channel = new Channel<int>();
const int max = 5000000;
var reset = new AutoResetEvent(false);
Action<int> onMsg = delegate(int count)
{
if (count == max)
{
reset.Set();
}
};
channel.Subscribe(fiber, onMsg);
using (new PerfTimer(max))
{
for (var i = 0; i <= max; i++)
{
channel.Publish(i);
}
Assert.IsTrue(reset.WaitOne(30000, false));
}
}
}
示例4: Batching
public void Batching()
{
using (var fiber = new ThreadFiber())
{
fiber.Start();
var counter = new Channel<int>();
var reset = new ManualResetEvent(false);
var total = 0;
Action<IList<int>> cb = delegate(IList<int> batch)
{
total += batch.Count;
if (total == 10)
{
reset.Set();
}
};
counter.SubscribeToBatch(fiber, cb, 1);
for (var i = 0; i < 10; i++)
{
counter.Publish(i);
}
Assert.IsTrue(reset.WaitOne(10000, false));
}
}
示例5: BatchingWithKey
public void BatchingWithKey()
{
using (var fiber = new ThreadFiber())
{
fiber.Start();
var counter = new Channel<int>();
var reset = new ManualResetEvent(false);
Action<IDictionary<String, int>> cb = delegate(IDictionary<String, int> batch)
{
if (batch.ContainsKey("9"))
{
reset.Set();
}
};
Converter<int, String> keyResolver = x => x.ToString();
counter.SubscribeToKeyedBatch<int, String>(fiber, cb, keyResolver, 0);
for (var i = 0; i < 10; i++)
{
counter.Publish(i);
}
Assert.IsTrue(reset.WaitOne(10000, false));
}
}
示例6: Run
private static void Run(long n, bool useSameThread)
{
AutoResetEvent done1 = new AutoResetEvent(false), done2 = new AutoResetEvent(false);
IQueue q1 = new DefaultQueue(), q2 = new DefaultQueue();
IFiber f1 = new ThreadFiber(q1), f2 = useSameThread ? f1 : new ThreadFiber(q2);
IChannel<long> c1 = new Channel<long>(), c2 = new Channel<long>();
c2.Subscribe(f2, (x) =>
{
if (x < n)
{
c1.Publish(++x);
}
if (x >= n)
{
done2.Set();
}
}
);
c1.Subscribe(f1, (x) =>
{
if (x < n)
{
c2.Publish(++x);
}
if (x >= n)
{
done1.Set();
}
}
);
f1.Start();
if (!useSameThread) f2.Start();
c1.Publish(0);
EventWaitHandle.WaitAll(new[] { done1, done2 });
f1.Dispose();
f2.Dispose();
}
示例7: PubSubWithDedicatedThread
public void PubSubWithDedicatedThread()
{
using (var fiber = new ThreadFiber())
{
fiber.Start();
var channel = new Channel<string>();
var reset = new AutoResetEvent(false);
channel.Subscribe(fiber, delegate { reset.Set(); });
channel.Publish("hello");
Assert.IsTrue(reset.WaitOne(5000, false));
}
}
示例8: TestFromRetlangSitePoolFiber
public void TestFromRetlangSitePoolFiber()
{
//the test from retlang basic example
using (var fiber = new PoolFiber())
{
fiber.Start();
var channel = new Channel<string>();
var reset = new AutoResetEvent(false);
channel.Subscribe(fiber, delegate { reset.Set(); });
channel.Publish("hello");
Assert.IsTrue(reset.WaitOne(5000, false));
}
}
示例9: Main
private static void Main(string[] args)
{
IChannel<string> toProcess = new Channel<string>();
IChannel<string> completed = new Channel<string>();
//first fiber will place something on channel for 2nd fiber to process
using (IFiber fiber1 = PoolFiber.StartNew())
//2nd fiber just writes to the completed channel
using (IDisposable processor = new ChannelAgent<string>(toProcess, s => completed.Publish("Received " + s)))
//A logger that watches the completed channel. Could be optional
using (IDisposable logger = new ChannelAgent<string>(completed, Console.WriteLine))
{
int count = 0;
//Start sending a message after a second, every 2 seconds...
fiber1.Schedule(() => toProcess.Publish("Test" + count++), TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
Console.ReadKey();
}
}
示例10: DisposeShouldClearAllLists
public void DisposeShouldClearAllLists()
{
var sut = new StubFiber();
var channel = new Channel<int>();
channel.Subscribe(sut, x => { });
sut.Schedule(() => { }, 1000);
channel.Publish(2);
Assert.AreEqual(1, sut.Subscriptions.Count);
Assert.AreEqual(1, sut.Scheduled.Count);
Assert.AreEqual(1, sut.Pending.Count);
sut.Dispose();
Assert.AreEqual(0, sut.Subscriptions.Count);
Assert.AreEqual(0, sut.Scheduled.Count);
Assert.AreEqual(0, sut.Pending.Count);
}
示例11: TestBatchingWithKey
public static void TestBatchingWithKey(IFiber fiber)
{
using (fiber)
using (var reset = new ManualResetEvent(false))
{
var counter = new Channel<int>();
Action<IDictionary<String, int>> cb = batch =>
{
if (batch.ContainsKey("9"))
reset.Set();
};
Converter<int, String> keyResolver = x => x.ToString();
//disposed with fiber
counter.SubscribeToKeyedBatch(fiber, keyResolver, cb, TimeSpan.FromMilliseconds(1));
for (int i = 0; i < 10; i++)
counter.Publish(i);
Assert.IsTrue(reset.WaitOne(10000, false));
}
}
示例12: TestBatching
public static void TestBatching(IFiber fiber)
{
using (fiber)
using (var reset = new ManualResetEvent(false))
{
var counter = new Channel<int>();
int total = 0;
Action<IList<int>> cb = batch =>
{
total += batch.Count;
if (total == 10)
reset.Set();
};
counter.SubscribeToBatch(fiber, cb, TimeSpan.FromMilliseconds(1));
for (int i = 0; i < 10; i++)
counter.Publish(i);
Assert.IsTrue(reset.WaitOne(10000, false));
}
}
示例13: PointToPointPerfTestWithInt
public void PointToPointPerfTestWithInt(FiberBase fiber)
{
using (fiber)
{
fiber.Start();
var channel = new Channel<int>();
const int max = 5000000;
var reset = new AutoResetEvent(false);
var counter = new CounterInt(reset, max);
channel.Subscribe(fiber, counter.OnMsg);
Thread.Sleep(100);
using (new PerfTimer(max))
{
for (int i = 0; i <= max; i++)
channel.Publish(i);
Assert.IsTrue(reset.WaitOne(30000, false));
}
}
}
示例14: BasicPubSubWithPoolQueue
public void BasicPubSubWithPoolQueue()
{
IFiber queue = new PoolFiber();
queue.Start();
Channel<string> hello = new Channel<string>();
Channel<string> hello2 = new Channel<string>();
AutoResetEvent reset = new AutoResetEvent(false);
Action<string> receiveHello = delegate(string str)
{
Assert.AreEqual("hello", str);
reset.Set();
};
hello.Subscribe(queue, receiveHello);
hello2.Subscribe(queue, receiveHello);
Assert.IsTrue(hello.Publish("hello"));
Assert.IsTrue(reset.WaitOne(10000, false));
queue.Dispose();
}
示例15: MyOwnBatchingTestToMakeSureIUnderstandRetlangsBatchingStuff
public void MyOwnBatchingTestToMakeSureIUnderstandRetlangsBatchingStuff()
{
using (var fiber = new PoolFiber())
{
fiber.Start();
var reset = new ManualResetEvent(false);
var channel = new Channel<BatchTestMessage>();
channel.SubscribeToBatch(fiber, BatchSubscriberMethod, 1);
for(var i=0; i < 10; i++) // <--- increase to 1000000 or so to see it make 3 or 4 calls to BatchSubscriber!
{
channel.Publish(new BatchTestMessage("loop " + i));
}
//Assert.IsTrue(reset.WaitOne(10000, false));
reset.WaitOne(1000, false);
}
}