Tag: 异步

C#.NET Web服务异步

我正在尝试使用Web服务实现一个执行一些非常冗长的任务的API。 我基本上希望Web服务启动执行冗长任务的线程,并使其保持运行直到完成。 问题是因为它是一个API,我希望它是跨平台的。 所以我的问题如下: 是否可以进行不需要客户端在.NET Framework上的异步调用? (看起来初始/结束框架需要我返回.NET IASyncResult对象)如果是这样,怎么办呢? 完全明确的示例代码将非常有用。 因为Web服务中没有状态保留,以后可以恢复该线程吗? 如果客户想要取消该过程,这将非常重要。

C#如何将不仅仅是IAsyncResult传递给AsyncCallback?

如何将IAsyncResult传递给AsyncCallback? 示例代码: //Usage var req = (HttpWebRequest)iAreq; req.BeginGetResponse(new AsyncCallback(iEndGetResponse), req); //Method private void iEndGetResponse(IAsyncResult iA, bool iWantInToo) { /*…*/ } 我想传递示例变量bool iWantInToo 。 我不知道如何将其添加到new AsyncCallback(iEndGetResponse) 。

异步multithreadingexception处理?

我想在我的异步编程(beginInvoke / endInvoke)中有一个exception处理方法,其中如果任何一个线程(beginInvoke)失败,那么我希望所有其他异步处理线程停止工作。 请建议一些解决方案?,下面我也附上我的示例代码: public List SendMailAsynch(List requestDto) { List resultDto = new List(); List asyncResults = new List(); foreach (ThreadRequestDto t in requestDto) { //Create a delegate. DoSomeAsynchWorkDelegate del = new DoSomeAsynchWorkDelegate(DoSomeAsynchWork); // Initiate the asynchronous call IAsyncResult a = del.BeginInvoke(t,null, del); //IAsyncResult a = del.BeginInvoke(t, null,null); asyncResults.Add(a); } foreach (IAsyncResult ar in asyncResults) […]

是Socket。*异步方法是否有线程?

我目前正在尝试确定什么是最小化我在TCP主服务器中使用的线程数量的最佳方法,以便最大限度地提高性能。 由于我最近在使用C#5.0的新异步function阅读了很多内容,异步并不一定意味着multithreading。 它可能意味着在较小的有限状态对象块中分离,然后通过交替处理与其他操作一起处理。 但是,我不知道如何在网络中做到这一点,因为我基本上“等待”输入(来自客户端)。 因此,我不会对所有套接字使用ReceiveAsync(),它只是连续创建和结束线程(假设它确实创建了线程)。 因此,我的问题或多或少:主服务器可以在没有每个连接一个“线程”的情况下采用什么架构? 奖励酷点的一个问题:为什么multithreading坏了,考虑到拥有一定数量的线程超过你的处理内核数量只会使机器“假”multithreading,就像任何其他异步方法一样?

如何在没有Async CTP的情况下实现等待

您将如何实现与Async CTP await关键字类似的function? 是否存在一个简单的实现,在所有情况下都像await一样,或者是否需要针对不同场景的不同实现?

Fire和忘记异步委托的正确方法

考虑到我对异步委托的主题生锈了。 如果我想以异步方式异步调用方法,这是一种合适的方法吗? Action action = DoSomething; action.BeginInvoke(action.EndInvoke, null); DoSomething()方法捕获所有exception并在内部处理它们。 对EndInvoke的调用是否合适? 需要? 是否有更清晰的方法来实现相同的行为?

我在哪里处理异步exception?

请考虑以下代码: class Foo { // boring parts omitted private TcpClient socket; public void Connect(){ socket.BeginConnect(Host, Port, new AsyncCallback(cbConnect), quux); } private void cbConnect(IAsyncResult result){ // blah } } 如果socket在BeginConnect返回之后并且在调用BeginConnect之前抛出exception,它会弹出哪里? 它甚至被允许扔在后台吗?

当代码的所有部分都不是异步时,异步Web服务有什么好处

我想知道如果不是代码的所有部分都是异步的,那么使用异步http请求会带来多少好处。 让我们考虑一下场景:1)异步http请求阻塞同步数据库调用,以及2)同步等待异步数据库调用的http请求。 1)Web Api支持异步操作方法,但是如果我在处理请求时执行同步数据库调用,那么线程会阻塞调用,并且我不会获得async可以给我的更好的线程经济性的好处或什么? 2)如果我有一个等待异步数据库调用的同步ServiceStack服务调用,那么会发生什么? 我假设一个线程被保留用于处理整个同步http请求,当这个线程等待异步调用时,它仍然保留给Web请求或者什么? 基本上我的问题可归结为:如果不是所有的IO调用都是异步的话,有没有理由使用异步?

是否可以在自定义WCF服务行为中创建TransactionScope? (async,await,TransactionScopeAsyncFlowOption.Enabled)

TL; DR? 截屏解释问题: https : //youtu.be/B-Q3T5KpiYk 问题 将事务从客户端流向服务时Transaction.Current在等待服务调用服务后变为null 。 当然,除非您在服务方法中创建一个新的TransactionScope,如下所示: [OperationBehavior(TransactionScopeRequired = true)] public async Task CallAsync() { using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { await _service.WriteAsync(); await _service.WriteAsync(); scope.Complete(); } } 为什么默认情况下不启用TransactionScopeAsyncFlowOption我不知道,但我不想重复自己,所以我想我总是使用自定义行为创建一个带有该选项的内部事务管理器。 问题更新 它甚至不必是服务调用服务,等待本地异步方法也使Transaction.Current无效。 用一个例子来澄清 [OperationBehavior(TransactionScopeRequired = true)] public async Task CallAsync() { await WriteAsync(); // Transaction.Current is now null await WriteAsync(); } 试图解决方案 […]

纤维与异步等待

我正在加入一个C#项目,其中开发人员大量使用Fibers 。 在这个项目之前,我甚至没有听说过它们,之前使用async await和Threads和BackgroundWorker来处理我的多任务操作。 今天我问他们为什么他们使用Fiber s,主要的开发人员说他更容易调试。 这意味着他知道特定函数来自哪个线程,甚至可以访问堆栈中更高的变量。 我想知道使用Fiber s与使用新的async await和使用Thread的优点和缺点是什么。 PS:我们正在使用.Net 4.5