2016-10-26 26 views
5

Tôi đang cố gắng để kiểm tra việc hủy bỏ một mục DispatchWork trong một sân chơi Swift, mặc dù trong vài phần nghìn giây thực thi có lỗi, tôi không chắc nó thực sự là gì chỉ ra, cũng không phải tôi có thể nói nếu lỗi gây ra việc hủy bỏ chứ không phải là phương pháp cancel() ...Xcode: Lỗi miền = 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.} 

có ai đó có một ý tưởng gì lỗi được chỉ ra?

+0

Tôi đã tìm thấy cùng một vấn đề. Nó chỉ xảy ra ở sân chơi - nếu bạn chạy nó bên trong một ứng dụng thì nó sẽ hoạt động. Mở để tìm hiểu lý do tại sao có giới hạn này trong sân chơi nếu ai đó biết. –

Trả lời

3

Đặt needsIndefiniteExecution thành true có thể bỏ qua cảnh báo này. Cảnh báo xảy ra sau khi thực hiện sân chơi kết thúc sớm hơn xử lý luồng.

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 
Các vấn đề liên quan