无法执行kotlin协程(没有这样的方法异常

时间:2017-10-31 09:28:15

标签: kotlin kotlinx.coroutines

我从kotlin示例中获取了这个简单的代码片段:

fun main(args: Array<String>) = runBlocking<Unit> {
    withTimeout(1300L) {
        repeat(1000) { i ->
            println("I'm sleeping $i ...")
            delay(500L)
        }
    }
}

当我尝试运行它时,它会抛出

java.lang.NoSuchMethodError: kotlinx.coroutines.experimental.ScheduledKt.withTimeout$default(JLjava/util/concurrent/TimeUnit;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/lang/Object;

我使用 kotlinVersion =&#39; 1.1.51&#39;

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

在您的情况下,请确保在build.gradle文件中启用协同程序:

    add  <cc1:ToolkitScriptManager></cc1:ToolkitScriptManager> instead of   <asp:ScriptManager></asp:ScriptManager>

your aspx page  ----

    <cc1:ToolkitScriptManager ID="ScriptManager1" runat="server" 
    EnablePageMethods = "true">
    </cc1:ToolkitScriptManager>

    <asp:TextBox ID="txtContactsSearch" runat="server"></asp:TextBox>
               <cc1:AutoCompleteExtender ServiceMethod="SearchCustomers" MinimumPrefixLength="1" CompletionInterval="10"  
                EnableCaching="false" CompletionSetCount="10" TargetControlID="txtContactsSearch" ID="AutoCompleteExtender2"  
                runat="server" FirstRowSelected="false"></cc1:AutoCompleteExtender>  


    your cs page----

    [System.Web.Script.Services.ScriptMethod()]
            [System.Web.Services.WebMethod]
            public static List<string> SearchCustomers(string prefixText, int count)
            {

                using (SqlConnection conn = new SqlConnection())
                {
                    conn.ConnectionString = ConfigurationManager
                            .ConnectionStrings["conio"].ConnectionString;
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.CommandText = "select clientID from clientsDetails where "+"clientID like @SearchText + '%'";
                        cmd.Parameters.AddWithValue("@SearchText", prefixText);
                        cmd.Connection = conn;
                        conn.Open();
                        List<string> customers = new List<string>();
                        using (SqlDataReader sdr = cmd.ExecuteReader())
                        {
                            while (sdr.Read())
                            {
                                customers.Add(sdr["name"].ToString());
                            }
                        }
                        conn.Close();
                        return customers;
                    }
                }
            }

此外,您应该使用启动(UI)触发协程,并显式调用wait()和挂起的方法。其余的代码将在UI线程上执行。

希望它解决了你的问题!