using System;
public class Test
{
public void DoReport(int prog)
{
Console.WriteLine("Progress {0}", prog);
}
public void DoCount(int t, IProgress<int> iprog = null)
{
Console.WriteLine("Doing loops to {0}", t);
for (int j = 0; j < t; j++)
{
if (iprog != null)
iprog.Report(j);
Thread.Sleep(1000);
}
}
public async void SomeTaskAsync(int t)
{
Progress<int> iprog = new Progress<int>(pr => { DoReport(pr); });
// ((IProgress<int>)iprog).Report(72);
await Task.Run(() => { DoCount(t, iprog); });
// ((IProgress<int>)iprog).Report(83);
Console.WriteLine("Finished Async.");
}
public static void Main()
{
Test test = new Test();
test.SomeTaskAsync(7);
Console.WriteLine("Finished.");
Thread.Sleep(8000);
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHZvaWQgRG9SZXBvcnQoaW50IHByb2cpCgl7CgkJQ29uc29sZS5Xcml0ZUxpbmUoIlByb2dyZXNzIHswfSIsIHByb2cpOwoJfQoKCXB1YmxpYyB2b2lkIERvQ291bnQoaW50IHQsIElQcm9ncmVzczxpbnQ+IGlwcm9nID0gbnVsbCkKCXsKCQlDb25zb2xlLldyaXRlTGluZSgiRG9pbmcgbG9vcHMgdG8gezB9IiwgdCk7CgoJCWZvciAoaW50IGogPSAwOyBqIDwgdDsgaisrKQoJCXsKCQkJaWYgKGlwcm9nICE9IG51bGwpCgkJCQlpcHJvZy5SZXBvcnQoaik7CgkJCVRocmVhZC5TbGVlcCgxMDAwKTsKCQl9Cgl9CgoJcHVibGljIGFzeW5jIHZvaWQgU29tZVRhc2tBc3luYyhpbnQgdCkKCXsKCQlQcm9ncmVzczxpbnQ+IGlwcm9nID0gbmV3IFByb2dyZXNzPGludD4ocHIgPT4geyBEb1JlcG9ydChwcik7IH0pOwoJCQoJCS8vICgoSVByb2dyZXNzPGludD4paXByb2cpLlJlcG9ydCg3Mik7CgkJYXdhaXQgVGFzay5SdW4oKCkgPT4geyBEb0NvdW50KHQsIGlwcm9nKTsgfSk7CgkJLy8gKChJUHJvZ3Jlc3M8aW50PilpcHJvZykuUmVwb3J0KDgzKTsKCQlDb25zb2xlLldyaXRlTGluZSgiRmluaXNoZWQgQXN5bmMuIik7Cgl9CgoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCVRlc3QgdGVzdCA9IG5ldyBUZXN0KCk7CgkJCgkJdGVzdC5Tb21lVGFza0FzeW5jKDcpOwoJCUNvbnNvbGUuV3JpdGVMaW5lKCJGaW5pc2hlZC4iKTsKCQkKCQlUaHJlYWQuU2xlZXAoODAwMCk7Cgl9Cn0K