下面有什么区别
ThreadPool.QueueUserWorkItem
Run Code Online (Sandbox Code Playgroud)
VS
Task.Factory.StartNew
Run Code Online (Sandbox Code Playgroud)
如果对于某些长时间运行的任务调用上述代码500次,是否意味着将占用所有线程池线程?
或者TPL(第二选项)是否足够聪明,只能占用少于或等于处理器数量的线程?
我想创建一个异步函数,所以我只需添加async如下:
public async static void something(){
}
Run Code Online (Sandbox Code Playgroud)
你可以看到它的返回类型是void.我只是想这一功能,必须异步调用不会阻塞,因为回报void所以没有await需要.
但Visual Studio 2012只是无法编译这个,它说我想念await?
你能告诉一个async没有使用功能的样品吗await?
我有这个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) 我的要求很奇怪.
我有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(并行调用它们看起来不可能的)GetDataFor()都完成运行SomeMethod()按照YK1的回答,我试图像这样修改它:
public async Task<void> SomeMethod()
{
for(int i …Run Code Online (Sandbox Code Playgroud)