using System;
using System.Threading ;
public class Test
{
public static void Main( )
{
var mre = new ManualResetEvent( false ) ;
for ( int i = 0 ; i < 10 ; i++ )
ThreadPool.QueueUserWorkItem (
( o) =>
{
Console.WriteLine ( "{0} Starting to Wait" , Thread.CurrentThread .ManagedThreadId ) ;
if ( mre.WaitOne ( 10000 ) )
Console.WriteLine ( "{0} yay" , Thread.CurrentThread .ManagedThreadId ) ;
else
Console.WriteLine ( "{0} should not happen" , Thread.CurrentThread .ManagedThreadId ) ;
} ) ;
Thread.Sleep ( 5000 ) ;
Console.WriteLine ( "Releasing" ) ;
mre.Set ( ) ;
mre.Reset ( ) ;
Thread.Sleep ( 10000 ) ;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwoKcHVibGljIGNsYXNzIFRlc3QKewogICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBtcmUgPSBuZXcgTWFudWFsUmVzZXRFdmVudChmYWxzZSk7CgogICAgICAgIAlmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspCiAgICAgICAgICAgICAgICAJVGhyZWFkUG9vbC5RdWV1ZVVzZXJXb3JrSXRlbSgKCQkJCShvKSA9PiAKCQkJCXsKCQkJCQlDb25zb2xlLldyaXRlTGluZSgiezB9IFN0YXJ0aW5nIHRvIFdhaXQiLCBUaHJlYWQuQ3VycmVudFRocmVhZC5NYW5hZ2VkVGhyZWFkSWQpOwogICAgICAgICAgICAgICAgCQkJaWYgKG1yZS5XYWl0T25lKDEwMDAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgCQkJQ29uc29sZS5Xcml0ZUxpbmUoInswfSB5YXkiLCBUaHJlYWQuQ3VycmVudFRocmVhZC5NYW5hZ2VkVGhyZWFkSWQpOwoJICAgICAgICAgICAgICAgICAgICAJCWVsc2UKICAgICAgICAJICAgICAgICAgICAgICAgIAkJQ29uc29sZS5Xcml0ZUxpbmUoInswfSBzaG91bGQgbm90IGhhcHBlbiIsIFRocmVhZC5DdXJyZW50VGhyZWFkLk1hbmFnZWRUaHJlYWRJZCk7CiAgICAgICAgICAgICAgCQkgIAl9KTsKCiAgICAgICAgICAgIAlUaHJlYWQuU2xlZXAoNTAwMCk7CiAgICAgICAgICAgIAlDb25zb2xlLldyaXRlTGluZSgiUmVsZWFzaW5nIik7CiAgICAgICAgICAgIAltcmUuU2V0KCk7ICAgICAgICAgICAgCQogICAgICAgICAgICAJbXJlLlJlc2V0KCk7CiAgICAgICAgICAgIAlUaHJlYWQuU2xlZXAoMTAwMDApOwoJfQp9