Salakhetdinov Shamil
mcp2004 at mail.ru
Tue Jun 19 11:27:36 CDT 2012
Hi Gustav --
Yes, I have run this code in LINQPad 4.42.1, I have got purchased a Premium version to have Intellisense etc.
LINQPad is a great C# learning/mastering/"code snippeting"/experimenting tool.
But you know that LINQPad is a great tool AFAIK :)
I have put .Sleep(1000) in Test1 class Setup method to show that in this case Test2 runs first and in parallel - did you mean that?
> That looks clever and tight.
Thank you, just a bit maybe - when I'm reading "C# 4.0 in a Nutshell" by Joseph and Ben Albahari I'm feeling myself as a 1st grade pupil - the concepts and techniques of modern C# (functional) parallel programming they present in many parts of heir book are so advanced...
BTW, I still can't get how LINQPad dynamically builds ADO.NET EF model/assembly from given MS SQL database connection - have you seen/read anywhere how it's done, what (third party) .NET classlibs they use?
Thank you.
-- Shamil
Tue, 19 Jun 2012 18:18:13 +0200 от "Gustav Brock" <gustav at cactus.dk>:
> Hi Shamil
>
> That looks clever and tight.
> I guess if you didn't have the Sleep(1000) method, the code would run with one timestamp only.
>
> But do you really run this from within LINQPad?
>
> /gustav
>
>
> >>> Salakhetdinov Shamil <mcp2004 at mail.ru> 19-06-12 17:57 >>>
> Hi All -
>
> I wanted to share some code snippets I'm getting written here while mastering C# programming using LINQPad.
> Presented here code snippet will instantiate and run in parallel two sample test classes resulting in an output as the following:
>
> 19.06.2012 19:49:42: Test1 instantiated.
> 19.06.2012 19:49:42: Test2 instantiated.
> 19.06.2012 19:49:42: Test1 setup.
> 19.06.2012 19:49:42: Test2 setup.
> 19.06.2012 19:49:43: Test2 run started...
> 19.06.2012 19:49:44: Test1 run started...
> 19.06.2012 19:49:44: Test2 run completed.
> 19.06.2012 19:49:44: Test2 tear down.
> 19.06.2012 19:49:45: Test1 run completed.
> 19.06.2012 19:49:45: Test1 tear down.
>
> All and any comments & remarks are very welcome!
>
> Thank you.
>
> -- Shamil
>
> P.S. Code snippet:
>
> --- cut here ---
>
> // LINQPad test program start code line - to be commented under VS
> static void Main() { Program.Main(); }
>
> // Program - main entry method
> class Program
> {
> public static void Main(string[] args = null)
> {
> try
> {
> // Short def:
> // Run tests from this assembly test classes in parallel
> //
> // Long def:
> // Select classes in this assembly,
> // which type name starts with a string 'Test',
> // order selected type names in ascending order,
> // and then for each selected class
> // start parallel thread, which will
> // create class instance,
> // will cast that instance to ITest interface,
> // and if cast returns not null ITest instance
> // will call Setup(), Run() and TearDown() methods...
> typeof(Program).Assembly.GetTypes()
> .Where(x => x.Name.StartsWith("Test"))
> .OrderBy(x => x.Name)
> .AsParallel()
> .ForAll(x =>
> {
> ITest test = Activator.CreateInstance(x) as ITest;
> if (test != null)
> {
> System.Console.WriteLine("{0}: {1} instantiated.", DateTime.Now, test.GetType().Name);
> test.Setup();
> test.Run();
> test.TearDown();
> }
> });
> }
> catch (Exception ex)
> {
> System.Console.WriteLine("Error = '{0}'", ex.Message);
> }
> }
> }
>
> // Logger - utility class
> public class Logger
> {
> protected void log(params dynamic[] args)
> {
> System.Console.WriteLine(args[0], args[1], args[2].Name);
> }
> }
>
> // ITest - test setup, run and tear down interface
> public interface ITest
> {
> void Setup();
> void Run();
> void TearDown();
> }
>
> // Test2 - sample test class
> public class Test2: Logger, ITest
> {
> public void Setup()
> {
> log("{0}: {1} setup.", DateTime.Now, typeof(Test2));
> }
> public void TearDown()
> {
> log("{0}: {1} tear down.", DateTime.Now, typeof(Test2));
> }
> void ITest.Run()
> {
> log("{0}: {1} run started...", DateTime.Now, this.GetType());
> System.Threading.Thread.Sleep(1000);
> log("{0}: {1} run completed.", DateTime.Now, this.GetType());
> }
> }
>
> // Test2 - sample test class
> public class Test1: Logger, ITest
> {
> public void Setup()
> {
> log("{0}: {1} setup.", DateTime.Now, this.GetType());
> System.Threading.Thread.Sleep(1000);
> }
> public void TearDown()
> {
> log("{0}: {1} tear down.", DateTime.Now, this.GetType());
> }
> void ITest.Run()
> {
> log("{0}: {1} run started...", DateTime.Now, this.GetType());
> System.Threading.Thread.Sleep(1000);
> log("{0}: {1} run completed.", DateTime.Now, this.GetType());
> }
> }
>
> -- cut here --
>
> Thank you.
>
> -- Shamil
>
> _______________________________________________
> dba-VB mailing list
> dba-VB at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/dba-vb
> http://www.databaseadvisors.com
>
>