using System;
using System.Collections.Generic;
using System.Threading.Tasks;
public class AgeIncrementor
{
private static readonly object syncLock = new object();
public AgeIncrementor()
{
Age = 0;
}
public int Age { get; set; }
public Task IncrementAge()
{
return Task.Run(() =>
{
try
{
lock (syncLock)
{
Age += 10;
Console.WriteLine("Increased to {0}", Age);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
});
}
public void Complete()
{
Console.WriteLine("Printing from Complete() method.");
}
static void Main(string[] args)
{
var ageIncrementor = new AgeIncrementor();
Console.WriteLine("Age is {0}", ageIncrementor.Age);
List<Task> tasks = new List<Task>();
for (int i = 0; i < 5; i++)
{
tasks.Add(ageIncrementor.IncrementAge());
}
Task.WaitAll(tasks.ToArray());
ageIncrementor.Complete();
Console.WriteLine("Completed");
Console.WriteLine("Final Age is {0}", ageIncrementor.Age);
Console.ReadKey();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKCnB1YmxpYyBjbGFzcyBBZ2VJbmNyZW1lbnRvcgp7CiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBvYmplY3Qgc3luY0xvY2sgPSBuZXcgb2JqZWN0KCk7CiAgICBwdWJsaWMgQWdlSW5jcmVtZW50b3IoKQogICAgewogICAgICAgIEFnZSA9IDA7CiAgICB9CgogICAgcHVibGljIGludCBBZ2UgeyBnZXQ7IHNldDsgfQogICAgcHVibGljIFRhc2sgSW5jcmVtZW50QWdlKCkKICAgIHsKICAgICAgICByZXR1cm4gVGFzay5SdW4oKCkgPT4KICAgICAgICAgewogICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbG9jayAoc3luY0xvY2spCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBBZ2UgKz0gMTA7CiAgICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJJbmNyZWFzZWQgdG8gezB9IiwgQWdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKGV4Lk1lc3NhZ2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKCiAgICB9CiAgICBwdWJsaWMgdm9pZCBDb21wbGV0ZSgpCiAgICB7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlByaW50aW5nIGZyb20gQ29tcGxldGUoKSBtZXRob2QuIik7CiAgICB9CiAgICAKICAgIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykKICAgIHsKCiAgICAgICAgdmFyIGFnZUluY3JlbWVudG9yID0gbmV3IEFnZUluY3JlbWVudG9yKCk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkFnZSBpcyB7MH0iLCBhZ2VJbmNyZW1lbnRvci5BZ2UpOwogICAgICAgIExpc3Q8VGFzaz4gdGFza3MgPSBuZXcgTGlzdDxUYXNrPigpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgdGFza3MuQWRkKGFnZUluY3JlbWVudG9yLkluY3JlbWVudEFnZSgpKTsKICAgICAgICB9CgkJVGFzay5XYWl0QWxsKHRhc2tzLlRvQXJyYXkoKSk7CiAgICAgICAgYWdlSW5jcmVtZW50b3IuQ29tcGxldGUoKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiQ29tcGxldGVkIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIkZpbmFsIEFnZSBpcyB7MH0iLCBhZ2VJbmNyZW1lbnRvci5BZ2UpOwogICAgICAgIENvbnNvbGUuUmVhZEtleSgpOwogICAgfQp9