相关疑难解决方法(0)

ThreadPool.QueueUserWorkItem与Task.Factory.StartNew

下面有什么区别

ThreadPool.QueueUserWorkItem
Run Code Online (Sandbox Code Playgroud)

VS

Task.Factory.StartNew
Run Code Online (Sandbox Code Playgroud)

如果对于某些长时间运行的任务调用上述代码500次,是否意味着将占用所有线程池线程?

或者TPL(第二选项)是否足够聪明,只能占用少于或等于处理器数量的线程?

c# multithreading threadpool c#-4.0

76
推荐指数
1
解决办法
3万
查看次数

在没有等待的情况下使用async

我想创建一个异步函数,所以我只需添加async如下:

public async static void something(){
}
Run Code Online (Sandbox Code Playgroud)

你可以看到它的返回类型是void.我只是想这一功能,必须异步调用不会阻塞,因为回报void所以没有await需要.

但Visual Studio 2012只是无法编译这个,它说我想念await

你能告诉一个async没有使用功能的样品吗await

c# asynchronous async-await c#-5.0 visual-studio-2012

33
推荐指数
1
解决办法
4万
查看次数

无法从任务列表中获取结果

我有这个async函数返回一个Task

public async Task<SettingModel> GetSetting(string key)
{
    var rootPath = _hostingEnvironment.ContentRootPath;
    using (StreamReader r = new StreamReader(rootPath + key + "settings.json"))
    {
        string json = await r.ReadToEndAsync();
        var settings = JsonConvert.DeserializeObject<SettingModel>(json);
        return settings;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想获得所有设置,然后等到所有设置完成后才这样

public async Task GetData(List<string> keys)
{
    var taskList = new List<Task>();
    foreach(var key in keys)
    {
        taskList.Add(GetSetting(key));
    }

    await Task.WhenAll(taskList.ToList());

    foreach (var task in taskList)
    {
        task.Result // here its not working. The task don't have a result :(
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# async-await

5
推荐指数
1
解决办法
1751
查看次数

异步运行同一方法的多个实例?

我的要求很奇怪.

我有SomeMethod()哪些电话GetDataFor().

public void SomeMethod()
{
    for(int i = 0; i<100; i++) {
        var data = GetDataFor(i);
    }
}

public data GetDataFor(int i) {
    //call a remote API
    //to generate data for i
    //store to database
    return data;
}
Run Code Online (Sandbox Code Playgroud)

对于每一个i,最终结果总是不同的.有没有需要等待GetDataFor(i)调用之前完成GetDataFor(i+1).

换句话说,我需要:

  • 呼吁GetDataFor()每个i+1 立即成功后调用i(并行调用它们看起来不可能的)
  • 等到所有 100个实例GetDataFor()都完成运行
  • 离开范围 SomeMethod()

按照YK1的回答,我试图像这样修改它:

public async Task<void> SomeMethod()
{
    for(int i …
Run Code Online (Sandbox Code Playgroud)

c# performance asynchronous task async-await

3
推荐指数
1
解决办法
6823
查看次数