データベース クエリを実行するとき、ページング クエリが頻繁に発生します。ただし、ページ分割されたクエリがキャンセルされると、タイミングの不正確さが発生する場合があります。この問題は、正確なタイミングが必要なアプリケーションにとって重要です。この記事では、PHP エディター Baicao が、タイミングの精度と精度を確保するためにこの問題に対処する方法を紹介します。この問題をよりよく理解し、対処できるように、考えられる原因と解決策をいくつか検討します。
クエリを非同期で実行できるページ分割された SQL クエリを作成するために使用されるオブジェクトがあります:
リーリーこのコード、特にキャンセル部分をテストしようとしています。私のテストコードは次のようになります:
リーリー私が抱えている問題は、cancel()
が呼び出されたときに、 at ステートメントを実行します - ctx.done
または 。実行は、結果を results チャネルに送信するまで、ループ内のどこでも発生する可能性があります。しかし、これは意味がありません。なぜなら、
results チャネルからデータを受信するまで実行がブロックされるはずであり、
cancel() を呼び出すまでブロックされないからです。さらに、SQL テストには sqlmock パッケージを使用していますが、これでは SQL クエリのいかなる種類のファジングも許可されません。この不具合が発生するのはなぜですか?どうすれば修正できますか?
chan([]*t, 1) を作成すると、チャンネルがいっぱいになったとき (つまり、単一のアイテムが含まれているとき) にブロックされることを意味すると思っていましたが、そうではありません。代わりに、バッファーがいっぱいのときにチャネルに送信しようとすると、ブロックが発生します。したがって、
results を次のように変更します:
リーリー
以上がページ分割されたクエリをキャンセルする際の不正確なタイミングを処理するためのテストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。