Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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# C中的异步任务和等待#_C#_Macos_Asynchronous_Xamarin - Fatal编程技术网

C# C中的异步任务和等待#

C# C中的异步任务和等待#,c#,macos,asynchronous,xamarin,C#,Macos,Asynchronous,Xamarin,我正在处理异步webservice调用,正在处理此任务并等待构建: private static async Task<RSAParameters> GetPublicSecretKey(ICoreIdentityService identityChannel) { Object state = null; var t = Task<RSAParameters>.Factory.FromAsync( identity

我正在处理异步webservice调用,正在处理此任务并等待构建:

private static async Task<RSAParameters> GetPublicSecretKey(ICoreIdentityService identityChannel)
{
        Object state = null;
        var t = Task<RSAParameters>.Factory.FromAsync(
            identityChannel.BeginGetPublicKey,
            identityChannel.EndGetPublicKey,
                null, state, TaskCreationOptions.None);
        return await t;
}

//Methods definition:
//IAsyncResult BeginGetPublicKey(AsyncCallback callback, object asyncState)
//RSAParameters EndGetPublicKey(IAsyncResult result)
私有静态异步任务GetPublicSecretKey(ICoreIdentityService identityChannel)
{
对象状态=空;
var t=Task.Factory.fromsync(
Identity Channel.BeginGetPublicKey,
identityChannel.EndGetPublicKey,
null、state、TaskCreationOptions.None);
返回等待t;
}
//方法定义:
//IAsyncResult BeginGetPublicKey(异步回调,对象异步状态)
//RSA参数EndGetPublicKey(IAsyncResult结果)
生成代码时,我会获取方法的类型参数。。。。无法从用法推断。我错过什么了吗

谢谢,这是事先准备好的。干杯,伊诺尔

修改的编译代码:

var t = Task<RSAParameters>.Factory.FromAsync(
    identityChannel.BeginGetPublicKey,
    identityChannel.EndGetPublicKey,
    TaskCreationOptions.None);
var t=Task.Factory.fromsync(
Identity Channel.BeginGetPublicKey,
identityChannel.EndGetPublicKey,
任务创建选项。无);

似乎您正在以意外的顺序使用参数调用fromsync()方法

错误消息本身建议显式命名您的参数,因此您的代码看起来应该是这样的:

var t = Task<RSAParameters>.Factory.FromAsync(
                asyncResult: identityChannel.BegineGetPublicKey,
                endMethod: identityChannel.EndGetPublicKey,
                creationOptions: TaskCreationOptions.None,
                scheduler: state);
var t=Task.Factory.fromsync(
asyncResult:identityChannel.BegineGetPublicKey,
endMethod:identityChannel.EndGetPublicKey,
creationOptions:TaskCreationOptions。无,
调度器(状态);
或者,您可以更正参数的顺序,这将解决问题。 我能找到的最接近的重载是:

public Task<TResult> FromAsync<TArg1, TArg2>(Func<TArg1, TArg2, AsyncCallback, object, IAsyncResult> beginMethod, Func<IAsyncResult, TResult> endMethod, TArg1 arg1, TArg2 arg2, object state, TaskCreationOptions creationOptions);
public Task fromsync(Func beginMethod、Func endMethod、arg1 arg1、arg2 arg2、对象状态、TaskCreationOptions creationOptions creationOptions);
因此,假设您打算使用此参数,则需要稍微修改代码,以传入arg1和arg2类型,然后传入一个附加参数:

Object state = null;
var t = Task<RSAParameters>.Factory.FromAsync<TArg1, TArg2>(
            beginMethod: identityChannel.BeginGetPublicKey,
            endMethod: identityChannel.EndGetPublicKey,
            arg1: null, // Either arg1, or arg2 is missing
            arg2: null, // from your code
            state: state,
            creationOptions: TaskCreationOptions.None);

return t;
对象状态=null;
var t=Task.Factory.fromsync(
beginMethod:identityChannel.BeginGetPublicKey,
endMethod:identityChannel.EndGetPublicKey,
arg1:null,//缺少arg1或arg2
arg2:null,//来自您的代码
州:州,,
creationOptions:TaskCreationOptions.None);
返回t;

为了清楚起见,我在这里留下了命名参数,但是如果您愿意,您应该可以删除这些参数。

我认为最简单的方法是
返回等待工厂。fromsync…
如果您只是要返回任务,则无需等待任务。只需
返回工厂。fromsync
感谢您的建议:)
返回等待t
应替换为
返回t。返回任务时,等待结果没有意义。无论如何,客户必须等待
。生成一个重复的状态机只会浪费CPU时间