Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 等待异步方法完成。(返回IAsyncResult的函数)_C#_Visual Studio 2010_.net 4.0_.net 4.5_Async Await - Fatal编程技术网

C# 等待异步方法完成。(返回IAsyncResult的函数)

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的结果(换句话说,在我得到结果之前一直坚持下去) 编辑: 我为什么要这样做 我只想检查

我有一个Web服务和这个特殊的功能:

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吗?你不必等待。有些情况下,你似乎不得不等待。描述您的情况,我们将帮助您找到替代等待的方法。