Scala Future لا يُرجع أي شيء عند تخصيص الكثير من الذاكرة

StackOverflow https://stackoverflow.com//questions/23057445

  •  26-12-2019
  •  | 
  •  

سؤال

باستخدام Scala-IDE 3.0.3 (استنادًا إلى Scala 2.10.4)، يكتمل التعليمة البرمجية التالية بشكل صحيح عن طريق عرض القيم العشرة الأولى للقيمة المحسوبة List من المستقبل وكذلك Future completedرسالة:

import scala.concurrent._
import scala.concurrent.duration._
import scala.util.{Failure, Success}
import ExecutionContext.Implicits.global

object FutureNonBlocking extends App {

    val f1: Future[List[Int]] = future {
        val t = List.range(1, 50).filter(_ % 2 == 0)
        println("Done")
        t
    }

    f1.onComplete {
        case Success(value) => println(value.take(10))
        case Failure(e) => println("Something bad happened")
    }

    Await.complete(f1, 30 seconds)
}

ومع ذلك، تغيير النطاق List.range(1, 50) ل List.range(1, 5000) لا يعرض أي شيء و( Failure لا يتم تشغيله).منطقيًا، يبدو أن الأمر مرتبط بمشكلة في الذاكرة ولكني لا أفهم ما يحدث هناك.

والأمر الأكثر غرابة هو أن تشغيل هذا الرمز في REPL لا يسبب المشكلة.ما الذي أفتقده هناك؟

هل كانت مفيدة؟

المحلول

اتضح أن الأمر برمته ليس مشكلة في إدارة الذاكرة Futures ولكنه مرتبط بالطريقة التي يتعامل بها Eclipse مع إخراج وحدة التحكم للبرامج المتزامنة.

إضافة Thread.sleep(1000) في نهاية البرنامج، اسمح لـ Eclipse بإظهار جميع مخرجات وحدة التحكم، وحل المشكلة.

شكرًا جزيلاً @jilen على تعليقك المفيد للغاية!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top