public static async void Test(this IContext context) { var orders = new List>(); var dt = DateTime.UtcNow; for (var i = 0; i < 10; ++i) { orders.Add(new Tuple(dt.AddSeconds(i * 2 + 2), i)); }
var task = orders.Select(i => new Task(() => { i.Item1.SleepUntil(); Console.WriteLine($"{DateTime.UtcNow}, {i.Item2}, {i. Item1}"); } )); foreach (var t in task) { t.Start(); } await Task.WhenAll(task.ToArray()); }
// Define other methods and classes here public static async Task Test() { var orders = new List>(); var dt = DateTime.UtcNow; for (var i = 0; i < 10; ++i) { orders.Add(new Tuple(dt.AddSeconds(i * 2 + 2), i)); }
var task = orders.Select(i => new Task(() => { Task.Delay(i.Item1 - DateTime.UtcNow).Wait(); Console.WriteLine($"{DateTime.UtcNow}, {i.Item2}, {i.Item1}");
})).ToList();
foreach (var t in task) { t.Start(); }
await Task.WhenAll(task); }
【 在 Jadeson (紫昂德帅) 的大作中提到: 】 : 下面的代码是希望每两秒打一次,然后打完十次退出。但是结果似乎一次都没有打。: 我后来把await WhenAll换成WaitAll,十次能打出来,但是不能正常退出。 : 请知道的朋友指点一下。谢谢 : public static async void Test(this IContext context) : { : var orders = new List>(); : var dt = DateTime.UtcNow; : for (var i = 0; i < 10; ++i) : { : orders.Add(new Tuple(dt.AddSeconds(i * 2 + 2) : ...................
下面的代码是希望每两秒打一次,然后打完十次退出。但是结果似乎一次都没有打。
我后来把await WhenAll换成WaitAll,十次能打出来,但是不能正常退出。
请知道的朋友指点一下。谢谢
public static async void Test(this IContext context)
{
var orders = new List>();
var dt = DateTime.UtcNow;
for (var i = 0; i < 10; ++i)
{
orders.Add(new Tuple(dt.AddSeconds(i * 2 + 2), i));
}
var task = orders.Select(i => new Task(() =>
{
i.Item1.SleepUntil();
Console.WriteLine($"{DateTime.UtcNow}, {i.Item2}, {i.
Item1}");
}
));
foreach (var t in task)
{
t.Start();
}
await Task.WhenAll(task.ToArray());
}
orders.Select() statement needs to end with ToList() or ToArray() to
materialize the tasks, like below,
void Main()
{
Test().Wait();
Console.WriteLine($"{DateTime.UtcNow}: Finished all!");
}
// Define other methods and classes here
public static async Task Test()
{
var orders = new List>();
var dt = DateTime.UtcNow;
for (var i = 0; i < 10; ++i)
{
orders.Add(new Tuple(dt.AddSeconds(i * 2 + 2), i));
}
var task = orders.Select(i => new Task(() =>
{
Task.Delay(i.Item1 - DateTime.UtcNow).Wait();
Console.WriteLine($"{DateTime.UtcNow}, {i.Item2}, {i.Item1}");
})).ToList();
foreach (var t in task)
{
t.Start();
}
await Task.WhenAll(task);
}
【 在 Jadeson (紫昂德帅) 的大作中提到: 】
: 下面的代码是希望每两秒打一次,然后打完十次退出。但是结果似乎一次都没有打。: 我后来把await WhenAll换成WaitAll,十次能打出来,但是不能正常退出。
: 请知道的朋友指点一下。谢谢
: public static async void Test(this IContext context)
: {
: var orders = new List>();
: var dt = DateTime.UtcNow;
: for (var i = 0; i < 10; ++i)
: {
: orders.Add(new Tuple(dt.AddSeconds(i * 2 + 2)
: ...................
多谢了
哇,这个老ID居然还活着。
【 在 Jadeson (紫昂德帅) 的大作中提到: 】
: 下面的代码是希望每两秒打一次,然后打完十次退出。但是结果似乎一次都没有打。: 我后来把await WhenAll换成WaitAll,十次能打出来,但是不能正常退出。
: 请知道的朋友指点一下。谢谢
: public static async void Test(this IContext context)
: {
: var orders = new List>();
: var dt = DateTime.UtcNow;
: for (var i = 0; i < 10; ++i)
: {
: orders.Add(new Tuple(dt.AddSeconds(i * 2 + 2)
: ...................