我想问你关于正确架构何时使用的意见Task.Run.我在WPF .NET 4.5应用程序(使用Caliburn Micro框架)中遇到了滞后的UI.
基本上我在做(非常简化的代码片段):
public class PageViewModel : IHandle<SomeMessage>
{
...
public async void Handle(SomeMessage message)
{
ShowLoadingAnimation();
// Makes UI very laggy, but still not dead
await this.contentLoader.LoadContentAsync();
HideLoadingAnimation();
}
}
public class ContentLoader
{
public async Task LoadContentAsync()
{
await DoCpuBoundWorkAsync();
await DoIoBoundWorkAsync();
await DoCpuBoundWorkAsync();
// I am not really sure what all I can consider as CPU bound as slowing down the UI
await DoSomeOtherWorkAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
从我阅读/看到的文章/视频中,我知道await async不一定在后台线程上运行,并且需要在后台开始工作,需要等待它Task.Run(async () => …
我有一个Parallel.ForEach()异步循环,我下载了一些网页.我的带宽有限,所以我每次只能下载x页,但Parallel.ForEach会执行所需网页的完整列表.
有没有办法在运行Parallel.ForEach时限制线程号或任何其他限制器?
演示代码:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
Run Code Online (Sandbox Code Playgroud)
真正的任务与网页无关,因此创意网络抓取解决方案无济于事.
使用Microsoft for .NET的异步CTP,是否可以捕获调用方法中异步方法抛出的异常?
public async void Foo()
{
var x = await DoSomethingAsync();
/* Handle the result, but sometimes an exception might be thrown.
For example, DoSomethingAsync gets data from the network
and the data is invalid... a ProtocolException might be thrown. */
}
public void DoFoo()
{
try
{
Foo();
}
catch (ProtocolException ex)
{
/* The exception will never be caught.
Instead when in debug mode, VS2010 will warn and continue.
The deployed the app will simply crash. …Run Code Online (Sandbox Code Playgroud) c# asynchronous exception-handling task-parallel-library async-await
我需要在控制台应用程序中运行多个异步任务,并在进一步处理之前等待它们全部完成.
那里有很多文章,但我读的越多越好.我已经阅读并理解了Task库的基本原理,但我显然错过了某处的链接.
我知道可以将任务链接起来,以便它们在另一个完成之后开始(这几乎是我读过的所有文章的场景),但我希望我的所有任务同时运行,我想知道一次他们都完成了.
对于这样的场景,最简单的实现是什么?
如何拒绝async/await函数返回的promise?
例如,最初
foo(id: string): Promise<A> {
return new Promise((resolve, reject) => {
someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400))
});
}
Run Code Online (Sandbox Code Playgroud)
转换为async/await
async foo(id: string): Promise<A> {
try{
await someAsyncPromise();
return 200;
} catch(error) {//here goes if someAsyncPromise() rejected}
return 400; //this will result in a resolved promise.
});
}
Run Code Online (Sandbox Code Playgroud)
那么,在这种情况下,我怎么能正确地拒绝这个承诺呢?
javascript asynchronous typescript es6-promise ecmascript-2017
我对此代码有疑问
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData* data = [NSData dataWithContentsOfURL:
kLatestKivaLoansURL];
[self performSelectorOnMainThread:@selector(fetchedData:)
withObject:data waitUntilDone:YES];
});
Run Code Online (Sandbox Code Playgroud)
这段代码的第一个参数是
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
Run Code Online (Sandbox Code Playgroud)
我们是否要求此代码在全局队列上执行串行任务,其定义本身是返回给定优先级的全局并发队列?
使用dispatch_get_global_queue主队列有什么好处?
我很迷惑.你能帮我更好地理解这个吗?
正如标题所示.我该怎么做呢?
我想whenAllDone()在forEach-loop遍历每个元素并完成一些异步处理之后调用.
[1, 2, 3].forEach(
function(item, index, array, done) {
asyncFunction(item, function itemDone() {
console.log(item + " done");
done();
});
}, function allDone() {
console.log("All done");
whenAllDone();
}
);
Run Code Online (Sandbox Code Playgroud)
有可能让它像这样工作吗?当forEach的第二个参数是一个回调函数,它在经过所有迭代后运行?
预期产量:
3 done
1 done
2 done
All done!
Run Code Online (Sandbox Code Playgroud) 一次又一次,我看到它说使用async- await不会创建任何额外的线程.这没有任何意义,因为计算机一次看起来只做一件事以上的唯一方法就是
因此,如果async- await这些都没有,那么它如何使应用程序响应?如果只有一个线程,则调用任何方法意味着在执行任何其他操作之前等待方法完成,并且该方法中的方法必须在继续之前等待结果,依此类推.
很久以前我写了一个我多线程的网络蜘蛛,以便同时发生并发请求.那是在我的Python青年时代,在我知道GIL及其为多线程代码创建的相关问题之前的几天(IE,大多数时候东西最终都被序列化了!)......
我想重做这段代码,使其更强大,性能更好.我基本上有两种方法可以做到这一点:我可以在2.6+中使用新的多处理模块,或者我可以选择某种类型的基于反应器/事件的模型.我宁愿做后者,因为它更简单,更不容易出错.
所以问题涉及哪种框架最适合我的需求.以下是我目前了解的选项列表:
我有什么遗漏吗?当然必须有一个适合简化的异步网络库的最佳点的库!
[编辑:非常感谢intgr指向此页面的指针.如果你滚动到底部,你会看到有一个非常好的项目列表,旨在以某种方式解决这个任务.事实上,自Twisted开始以来事情确实已经发生了变化:人们现在似乎更倾向于基于协同例程的解决方案而不是传统的反应堆/回调导向解决方案.这种方法的好处是更清晰,更直接的代码:我在过去肯定发现过,特别是在C++中使用boost.asio时,基于回调的代码可能会导致难以理解的设计并且相对模糊不清未经训练的眼睛.使用协同例程允许您编写至少看起来更加同步的代码.我想我现在的任务是找出我喜欢的这些库中的哪一个,并试一试!很高兴我现在问...]
[编辑:也许对任何跟随或偶然发现这个问题或者在任何意义上关心这个话题的人都感兴趣:我发现了一个非常好的关于这个工作的可用工具的当前状态的文章]
除了Microsoft文档之外,Microsoft Reactive(Rx)框架是否有一个很好的介绍和教程?
此外,Reactive使用常规异步编码技术解决难以解决的编程问题更容易成为一个很好的例子(使用代码)?
asynchronous ×10
c# ×6
.net ×4
async-await ×4
javascript ×2
callback ×1
es6-promise ×1
networking ×1
node.js ×1
objective-c ×1
python ×1
task ×1
twisted ×1
typescript ×1