谁能告诉我一些在C#中处理异步工作流的模式?我知道这很快就会在C# 5中实现,但我想知道是否有人已经在C# 4中实现了近似相同的效果?
基本上,我在Silverlight 4中编写了很多异步代码,如下所示:
CallService(
(service) => service.DoSomething(1, 2, 3),
(response) =>
{
// some local code
// need to call another service async
CallService(
我在将这个方法从c#转换到VB时遇到了一些问题,它在C#中工作得很完美:
private async void Test()
{
DataSet dt;
var client = new xxxSoapClient();
dt = await client.ToDoAsync();
}
我在VS2012中使用Async/await,在c#中一切正常,但在VB中尝试做完全相同的事情时,它会返回一个错误,指示system.void不可等待!
Private Async Sub Test()
Dim dt As Dat
我正在编写一个简单的C++客户机,它应该连接到C#服务器。而且,虽然客户端运行良好,甚至声明它发送了一串数据,但C#服务器从未通过listener.Acceppt()。
Console.WriteLine("Waiting for a connection...");
// Program is suspended while waiting for an incoming connection.
Socket handler = listener.Accept();
我从这里获取服务器源:
我使用的客户端代码可以在这里找到:
我还使用了符合的服务器进行了检查,它运行得很好。我
有没有一种“告诉”C#不要等待对象的方法返回的方法?
使用COM (VbScript),我可以在不等待方法返回的情况下触发一个方法,因此我想以同样的方式使用C#。
VbScript代码:
Dim qtApp
Set qtApp = CreateObject("QuickTest.Application")
qtApp.Open("C:\Temp\Test")
qtApp.Run '// VbScript does not wait for this method to finish
Set qtApp = Nothing
C#代码:
//Refe
假设我想从F#调用这个C#函数:
public static class Foo {
public Bar Baz()
{
...
}
}
问题是这个函数是CPU密集型的,我不想阻止它。不幸的是,C#库没有Task<Bar> BazAsync()重载。
然后,我希望自己提供异步版本,方法是创建一个F#函数来调用它并返回一个(已经启动的) Async<Bar>。也就是说,我不想使用System.Threading.Task<Bar>。
我想我要寻找的是Task<T>.Run()在F#异步方式中的等效性。
我已经
使用C#,我如何返回从调用EndRead的函数中读取的字节数?
即:
x.BeginRead (...ReadProc..);
// how can I get the number of bytes read here?
ReadProc (IAsyncResult ar)
{
int numBytesRead = EndRead ();
// how can I return numBytesRead?
}
在C#中,可以使用async对方法进行注释,如下所示:
class Foo
{
public async void Bar()
{
}
}
这与F# async不同;我相信在F#中这些称为任务。
那么,如何用async编写C#样式的F#成员函数呢?
// Not real code
type Foo () =
member async this.Bar () =
()
该解决方案必须使用与上面的C#相同的公共接口编译为IL。
我需要高效的(使用尽可能少的线程)异步方式进行计算(我使用.net 4)。一种方法是
ThreadPool.QueueUserWorkItem(f => job.DoWork());
job.Completed += (a, b) => {...} //Completed is event I fire when work is done
另一种可能是实现异步方法,就像C# v.5之前的一样,这基本上是在委托上调用BeginInvoke。
我的问题是:除了语法不同之外,这两个线程之间还有什么不同,因为BeginInvoke似乎也使用了ThreadPool中的一个新线程
顺便说一句