C# 等待异步方法完成。(返回IAsyncResult的函数)
我有一个Web服务和这个特殊的功能:C# 等待异步方法完成。(返回IAsyncResult的函数),c#,visual-studio-2010,.net-4.0,.net-4.5,async-await,C#,Visual Studio 2010,.net 4.0,.net 4.5,Async Await,我有一个Web服务和这个特殊的功能: IAsyncResult func(object signature, AsyncCallback callBack, object asyncState) 我可以理解,使用wait的唯一目的不是在长时间操作发生时阻塞UI 它还有一些回调函数,可以用来执行“func”的结果 在我的例子中,我必须等待(必须等待)直到得到func的结果 有什么建议我应该如何等到我得到func的结果(换句话说,在我得到结果之前一直坚持下去) 编辑: 我为什么要这样做 我只想检查
IAsyncResult func(object signature, AsyncCallback callBack, object asyncState)
我可以理解,使用wait的唯一目的不是在长时间操作发生时阻塞UI
它还有一些回调函数,可以用来执行“func”的结果
在我的例子中,我必须等待(必须等待)直到得到func的结果
有什么建议我应该如何等到我得到func的结果(换句话说,在我得到结果之前一直坚持下去)
编辑:
我为什么要这样做
我只想检查一下签名是否属于特殊类型。如果是,函数将停止执行并返回0。
这是我从func中需要的唯一功能,不值得定义回调方法和状态对象。您所描述的是异步编程模型,它早于任务,在.NET中广泛使用,直到v。3.5. 这是所有BeginXXX/EndXXX方法对使用的模型 您可以使用该方法执行任务。下面的示例来自文档,并通过FileStream BeginRead和EndRead方法创建任务 BeginRead的签名类似于func:
IAsyncResult BeginRead(byte[] array,int offset,
int numBytes,
AsyncCallback userCallback,
Object stateObject)
您可以将其转换为如下任务:
Task<int> task = Task<int>.Factory.FromAsync(
fs.BeginRead, fs.EndRead, data, 0, data.Length, null);
Task Task=Task.Factory.fromsync(
fs.BeginRead,fs.EndRead,data,0,data.Length,null);
一旦你有了任务,你可以等待它:
var bytes = await Task<int>.Factory.FromAsync(
fs.BeginRead, fs.EndRead, data, 0, data.Length, null);
var bytes=wait Task.Factory.fromsync(
fs.BeginRead,fs.EndRead,data,0,data.Length,null);
您所描述的是异步编程模型,它早于任务,并且在.NET到v中广泛使用。3.5. 这是所有BeginXXX/EndXXX方法对使用的模型
您可以使用该方法执行任务。下面的示例来自文档,并通过FileStream BeginRead和EndRead方法创建任务
BeginRead的签名类似于func:
IAsyncResult BeginRead(byte[] array,int offset,
int numBytes,
AsyncCallback userCallback,
Object stateObject)
您可以将其转换为如下任务:
Task<int> task = Task<int>.Factory.FromAsync(
fs.BeginRead, fs.EndRead, data, 0, data.Length, null);
Task Task=Task.Factory.fromsync(
fs.BeginRead,fs.EndRead,data,0,data.Length,null);
一旦你有了任务,你可以等待它:
var bytes = await Task<int>.Factory.FromAsync(
fs.BeginRead, fs.EndRead, data, 0, data.Length, null);
var bytes=wait Task.Factory.fromsync(
fs.BeginRead,fs.EndRead,data,0,data.Length,null);
我应该使用WaitOne吗?您不必等待。有些情况下,你似乎不得不等待。描述一下你的情况,我们会帮你找到一个替代等待的方法。我应该使用WaitOne吗?你不必等待。有些情况下,你似乎不得不等待。描述您的情况,我们将帮助您找到替代等待的方法。