Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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/3/xpath/2.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#_Asp.net_Promise - Fatal编程技术网

C# 在C中的异步函数中填充字符串数组#

C# 在C中的异步函数中填充字符串数组#,c#,asp.net,promise,C#,Asp.net,Promise,我有一个字符串[]parameters,通过调用另一个函数GetParameter从URL获取参数来填充它的值。我认为我需要将另一个函数转换为异步工作,以确保在启动初始函数的其余部分之前首先抓取参数(以及我需要确保首先完成的方法的其他部分) 异步是粘着的。不能只让一个部分是异步的-如果您想要使用返回任务的方法,那么您需要是异步的,等待结果。您不想成为异步void,因为这很糟糕™ - 您的方法可能是异步任务。消费者也需要这样做。等等但是: string[]参数=new[]{ 等待GetParame

我有一个字符串[]
parameters
,通过调用另一个函数
GetParameter
从URL获取参数来填充它的值。我认为我需要将另一个函数转换为异步工作,以确保在启动初始函数的其余部分之前首先抓取参数(以及我需要确保首先完成的方法的其他部分)


异步是粘着的。不能只让一个部分是异步的-如果您想要使用返回
任务
的方法,那么您需要是异步的,
等待
结果。您不想成为
异步void
,因为这很糟糕™ - 您的方法可能是
异步任务
。消费者也需要这样做。等等但是:

string[]参数=new[]{
等待GetParameter(uncleanedUrl,param1),
等待GetParameter(uncleanedUrl,param2)
};

调用
GetParameter(url、paramName、success=>…)的目的是什么?它看起来像是
HttpUtility.ParseQueryString(url).Get(paramName)
提供了您所需要的一切,对吗?为什么
GetParameter
是异步的?为什么它需要返回任务?这里提供的代码中的任何内容,以及
HttpUtility.ParseQueryString(String)
方法都不是异步的。为什么您认为需要这样做?我假设我需要
GetParameter
async,因为
uncleanedUrl
将是动态的,url中可能没有参数,所以我想先测试字符串,以确保它在尝试将其添加到字符串[]之前先有参数。主要功能的其余部分是清理从URL获取的参数,验证值,然后将它们作为参数传递到SQL数据库中。我将用更多代码编辑主帖子。更新主帖子
    private static string GetParameter(string url, stringParamName)
    {
        var indexQuery = url.IndexOf("?");
        var indexParam = url.IndexOf(paramName);

        return (indexQuery != -1 && indexParam != -1) ? HttpUtility.ParseQueryString(url).Get(paramName) : throw new Exception ("Missing query/parameter.");
    }

    private static void MainFunction()
    {
        var param1 = "test1";
        var param2 = "test2";
        var uncleanedUrl = "https://google.com/?test1=12345&test2=678901";
        String[] parameters = { GetParameter(uncleanedUrl, param1), GetParameter(uncleanedUrl, param2) }; //Should be populated like {12345, 67890}
        var validValues = new List<string>();
        int[] expectedParamLength = { 5, 6 };
        const string insertString =
            "USE [MY DB] GO" +
            "INSERT INTO [...]" +
            "([Column 1], [Column 2], [Column 1+2])" +
            "VALUES" +
            "(@Column1, @Column2, @Column3) GO";
        var connectionString = ""; //Connection string here

        for (int i = 0; i < parameters.Length; i++)
        {
            var validValue = int.TryParse(parameters[i].Trim(), out int number); // Returns true if the onversion to an int was succesful
            if (validValue && parameters[i].Length == expectedParamLength[i])
            {
                validValues.Add(parameters[i].Trim());
            }
        }

        if (validValues.Count == parameters.Length) //is number of validated values same as number of parameters we checked
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand insertCommand = new SqlCommand(insertString))
                {
                    using (SqlDataAdapter adapter = new SqlDataAdapter())
                    {
                        insertCommand.Parameters.AddWithValue("@Column1", validValues[0]);
                        insertCommand.Parameters.AddWithValue("@Column2", validValues[1]);
                        insertCommand.Parameters.AddWithVAlue("@Column3", validValues[0] + validValues[1]);
                        connection.Open();
                        adapter.InsertCommand.ExecuteNonQuery();
                    }
                }
            }
        }
    }
private static Task<string> GetParameter(string url, string paramName)
        {
            var returnedParameter = new TaskCompletionSource<string>();
            GetParameter(url, paramName, success =>
            {
                returnedParameter.SetResult(success);
            });
            return HttpUtility.ParseQueryString(url).Get(paramName);
        }