好吧,基本上我有一堆任务(10),我想同时启动它们并等待它们完成.完成后我想执行其他任务.我读了很多关于这方面的资源,但我无法理解我的具体案例......
这是我目前拥有的(代码已经简化):
public async Task RunTasks()
{
var tasks = new List<Task>
{
new Task(async () => await DoWork()),
//and so on with the other 9 similar tasks
}
Parallel.ForEach(tasks, task =>
{
task.Start();
});
Task.WhenAll(tasks).ContinueWith(done =>
{
//Run the other tasks
});
}
//This function perform some I/O operations
public async Task DoWork()
{
var results = await GetDataFromDatabaseAsync();
foreach (var result in results)
{
await ReadFromNetwork(result.Url);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,当我等待任务完成时WhenAll,它告诉我所有任务都已结束,即使它们都没有完成.我尝试添加Console.WriteLine我的内容foreach,当我进入延续任务时,数据不断从我以前的Tasks中进入,并没有真正完成.
我在这做错了什么?
我真的很惊讶我找不到与我的问题相关的任何内容.我正在寻找一种基于用户文本输入过滤我的对象数组的快速方法.
假设我有这个数组:
let data = [{
"id": 1,
"first_name": "Jean",
"last_name": "Owens",
"email": "jowens0@google.ru",
"gender": "Female"
}, {
"id": 2,
"first_name": "Marie",
"last_name": "Morris",
"email": "mmorris1@engadget.com",
"gender": "Female"
}, {
"id": 3,
"first_name": "Larry",
"last_name": "Wallace",
"email": "lwallace2@example.com",
"gender": "Male"
}];
Run Code Online (Sandbox Code Playgroud)
用户写"s",预期结果为:
let result = [{
"id": 1,
"first_name": "Jean",
"last_name": "Owens",
"email": "jowens0@google.ru",
"gender": "Female"
}, {
"id": 2,
"first_name": "Marie",
"last_name": "Morris",
"email": "mmorris1@engadget.com",
"gender": "Female"
}]
Run Code Online (Sandbox Code Playgroud)
我可以这样使用过滤功能:
let = searchText = "s";
let result = data.filter(object=>{
for …Run Code Online (Sandbox Code Playgroud) 当我发送对某个 API 的请求时,它们返回给我一个很棒的 json,但问题是,根据我提供的参数,对象名称总是不同,而数据结构保持不变。所以我尝试使用 Newtonsoft 库将 json 转换为 C# 类。我发现做到这一点的唯一方法是使用 JsonTextReader,但我想知道是否有更干净的方法来实现此目的,我查找了文档,但找不到任何可以在这方面帮助我的内容。我还尝试使用 JValue.Parse 进行动态对象映射,但由于属性名称总是不同,所以它对我没有帮助。这是一个代码示例来说明该问题:
{
"error": [],
"result": {
//This property name always changes
"changingPropertyName": [
[
"456.69900",
"0.03196000",
1461780019.8014,
]]
}
//C# mapping
public partial class Data
{
[JsonProperty("error")]
public object[] Error { get; set; }
[JsonProperty("result")]
public Result Result { get; set; }
}
public class Result
{
[JsonProperty("changingPropertyName")]
public object[][] changingPropertyName{ get; set; }
}
Run Code Online (Sandbox Code Playgroud) c# ×2
.net ×1
arrays ×1
async-await ×1
asynchronous ×1
filter ×1
javascript ×1
json ×1
json.net ×1