在试图找出新的(现在可能不是那么新,但对我而言是新的)TaskC#中的异步编程时,我遇到了一个问题,让我有点想弄清楚,我不知道为什么.
我已经解决了这个问题,但我仍然不确定为什么这是一个问题.我只是觉得我会分享我的经验,以防任何人遇到同样的情况.
如果有任何大师想告诉我这个问题的原因,那就太棒了,非常感激.我总是喜欢知道为什么有些东西不起作用!
我做了一个测试任务,如下:
Random rng = new Random((int)DateTime.UtcNow.Ticks);
int delay = rng.Next(1500, 15000);
Task<Task<object>> testTask = Task.Factory.StartNew<Task<object>>(
async (obj) =>
{
DateTime startTime = DateTime.Now;
Console.WriteLine("{0} - Starting test task with delay of {1}ms.", DateTime.Now.ToString("h:mm:ss.ffff"), (int)obj);
await Task.Delay((int)obj);
Console.WriteLine("{0} - Test task finished after {1}ms.", DateTime.Now.ToString("h:mm:ss.ffff"), (DateTime.Now - startTime).TotalMilliseconds);
return obj;
},
delay
);
Task<Task<object>>[] tasks = new Task<Task<object>>[] { testTask };
Task.WaitAll(tasks);
Console.WriteLine("{0} - Finished waiting.", DateTime.Now.ToString("h:mm:ss.ffff"));
// make console stay open till user …Run Code Online (Sandbox Code Playgroud) 我已经尝试寻找一个现有的问题,但不知道该怎么说这个,这检索没有任何结果:(
无论如何,我有一类具有不同属性的"订单项".这些订单商品用于服装,因此它们的尺寸(字符串).
因为我是关于这些事情的OCD,所以我希望元素不是按字母数字值排序,而是按自定义顺序排列.
如果可能的话,我也不希望这个自定义订单硬编码.
要分解,如果我有一个这些订单项的列表,每个订单项的大小,如下:
2XL
S
5XL
M
Run Code Online (Sandbox Code Playgroud)
使用字母数字排序,它将按以下顺序排列:
2XL
5XL
M
S
Run Code Online (Sandbox Code Playgroud)
但我想将此列表排序为此顺序(从最小的大小到最大的):
S
M
2XL
5XL
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一方法是使用硬编码的大小数组并按索引排序,然后当我需要获取大小值时,我可以获取大小顺序array [i]值.但是,正如我所说,我更希望这个命令不被硬编码.
我希望订单是动态的原因是订单项在运行时从硬盘上的文件加载,并且还在运行时由用户添加/编辑/删除,它们可能包含我没有的大小硬编码,例如我可以硬编码从10XS到10XL,但如果有人添加"110cm"(又称中等)的大小,它将按照我不想要的顺序出现在某个地方,假设程序没有崩溃和烧毁.
我无法完全理解如何做到这一点.