2016-10-26 1 views
5

Swift Playground内のDispatchWorkアイテムのキャンセルをテストしようとしていますが、最初の数ミリ秒の実行中にエラーがありますが、実際には何かがわかりません示し、またエラーがキャンセルではなくcancel()方法を引き起こしている場合、私が言うことができる...Xcode:Error Domain = DVTPlaygroundCommunicationErrorDomain Code = 1

func testDispatchWorkItems() { 
    let queue = DispatchQueue.global(qos: .userInitiated) 
    var item: DispatchWorkItem? 

    // create work item 

    item = DispatchWorkItem { 
     for i in 0 ... 100000 { 
      if item!.isCancelled { break } 
      print(i) 
     } 
    } 

    // start it 

    queue.async(execute: item!) 

    // after three seconds, stop it 

    queue.asyncAfter(deadline: .now() + 3) { 
     item?.cancel() 
    } 
} 

testDispatchWorkItems() 
2016-10-26 11:14:33.898 
com.apple.dt.Xcode.PlaygroundStub-macosx[30685:18567692] Error 
encountered communicating with Xcode: Error 
Domain=DVTPlaygroundCommunicationErrorDomain Code=1 "Cannot send data 
because stream is closed." UserInfo={NSLocalizedDescription=Cannot 
send data because stream is closed.} 

は、誰かがそのエラーを示すされているもののアイデアを持っていますか?

+0

同じ問題が見つかりました。それは単に遊び場で起こった - あなたがアプリケーション内でこれを実行するなら、それはうまくいくはずです。誰かが知っている場合、遊び場にこのような制限がある理由を学ぶことができます。 –

答えて

3

needsIndefiniteExecutiontrueに設定すると、この警告は省略できます。この警告は、プレイグラウンドの実行がスレッド処理よりも早く終了すると発生します。

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 
関連する問題