using System;
using System.Threading.Tasks;
public class Test
{
public static void Main()
{
var sequencer = new MessagingSequencer();
sequencer.AddMessage("アータタタタタタ");
sequencer.AddPause(2000);
sequencer.AddMessage("アータタタタタタ");
sequencer.AddPause(2000);
sequencer.AddMessage("オーワターっ");
sequencer.AddPause(3000);
sequencer.AddMessage("お前はもう死んでいる。");
Console.ReadKey();
}
}
interface IMessagingJob
{
void Action();
}
class MessageJob : IMessagingJob
{
public MessageJob(string msg)
{
Message = msg;
}
public string Message { get; private set; }
void IMessagingJob.Action()
{
Console.WriteLine(Message);
}
}
class PauseJob : IMessagingJob
{
public PauseJob(int milliSec)
{
Pause = milliSec;
}
public int Pause { get; private set; }
void IMessagingJob.Action()
{
Task.Delay(Pause).Wait();
}
}
class MessagingSequencer
{
public MessagingSequencer()
{
MessagingTask = Task.Run(() => { });
}
private Task MessagingTask { get; set;}
public void AddJob(IMessagingJob job)
{
MessagingTask = MessagingTask.ContinueWith(t => job.Action());
}
public void AddMessage(string message)
{
AddJob(new MessageJob(message));
}
public void AddPause(int milliSec)
{
AddJob(new PauseJob(milliSec));
}
}