0

私はゲームを開発しています。このゲームでは、プレーヤーはボタンをクリックしてボスを攻撃することができ、攻撃の結果が出るまで 5 分間待たなければなりません。攻撃は 5 分後にのみ実行されます。
だからここに私の試みがあります:ボタンがクリックされたときに呼び出される私の関数は次のとおりです:

public static void InsertNewWaitingAttack(string attacker_id, string boss_id, DateTime  start, DateTime done)
{
    string sql = "INSERT INTO WaitingAttacks (AttackerID,BossID,AttackTime,DoneTime) VALUES (@A_ID,@B_ID,@Start,@Done); ";
    sql += "WAITFOR DELAY '000:05:00'; ";
    sql += "INSERT INTO BossAttacks (AttackerID,BossID,AttackTime,Damage) VALUES (@A_ID,@B_ID,@Start,@Damage); ";
    sql += "DELETE FROM WaitingAttacks WHERE AttackerID=@A_ID AND AttackTime=@Start;";
    SqlConnection sc = new SqlConnection(conString);
    using (SqlCommand cmd = new SqlCommand(sql, sc))
    {
        cmd.Parameters.AddWithValue("A_ID", attacker_id);
        cmd.Parameters.AddWithValue("B_ID", boss_id);
        cmd.Parameters.AddWithValue("Start", start);
        cmd.Parameters.AddWithValue("Done", done);
        cmd.Parameters.AddWithValue("Damage", 500);
        sc.Open();
        cmd.ExecuteNonQuery();
        sc.Close();
    }
}

しかし、この関数を呼び出すと、次のエラーが発生します。

タイムアウトになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。

編集:私の質問を明確にするために、これはasp.netアプリケーションです。このソリューションでは、サーバーが複数のクライアントにサービスを提供する必要があることを考慮する必要があります。
ユーザーが攻撃の実行前に「結果ページ」に入ると、攻撃の実行までのカウントダウンが表示されます (これは、攻撃の開始時刻に常にアクセスできる必要があることを意味します )

まだ関連しています。私はまだ解決策を見つけていません。

4

2 に答える 2

-2

System.Threading.Sleepを非同期で試すことができます。ここで答えを参照してください。

非同期 Thread.Sleep()

于 2013-11-11T10:38:47.380 に答える