Przejdź do treści

KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ

Zadania, strumienie i zdarzenia [2.0]

ADVANCEDRUNNABLE_LOCALKretS

`async fn` i `await` (zadania współbieżne, nie równoległe), `Stream<Int>` z buforem i `for await`, `timeout` obsłużony w `try`/`catch`, deklaracja `event`, handler `on`, `emit` oraz `subscribe … with`.

Edycja i zapisane wyniki

Witryna nie wykonuje kodu ani nie prowadzi walidacji SDK. Wyniki poniżej pochodzą z eksportu określonej wersji i przestają opisywać kod po jego zmianie.

Kanoniczne pliki projektu

module Main

// Deklaracja zdarzenia: nazwa z kropkami i typowane argumenty.
event order.placed(amount: Int)

async fn produce(target: Stream<Int>, count: Int) {
    for i in range(1, count + 1) {
        await target.send(i * i)
    }
    target.close()
}

async fn slow(ms: Int) -> Int {
    await delay(milliseconds(ms))
    return ms
}

// Handler zdarzenia (może leżeć w dowolnym module pluginu).
on order.placed(amount: Int) {
    log.info("handler: zamówienie " + toString(amount))
}

// Dodatkowy subskrybent o zgodnej sygnaturze, dołączany i odłączany w czasie działania.
fn extra(amount: Int) {
    log.info("subskrybent: zamówienie " + toString(amount))
}

fn Start() -> String {
    let first = slow(20)
    let second = slow(30)
    let sum = await first + await second

    let squares: Stream<Int> = stream(2)
    produce(squares, 4)
    var total = 0
    for await value in squares {
        total = total + value
    }

    var late = "nie"
    try {
        let never = await timeout(milliseconds(10), slow(500))
        late = toString(never)
    } catch problem {
        late = "przekroczony"
    }

    subscribe order.placed with extra
    emit order.placed(5)
    unsubscribe order.placed with extra
    emit order.placed(1)

    return "zadania " + toString(sum) + "; strumień " + toString(total) + "; limit " + late
}

fn Shutdown() {
}

Czytanie kodu linia po linii

Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.

  1. module MainDeklaracja modułu KretS; porównaj nazwę z nazwą pliku.
  2. Pusta linia oddziela fragmenty źródła.
  3. // Deklaracja zdarzenia: nazwa z kropkami i typowane argumenty.Komentarz autora; nie jest wykonywany.
  4. event order.placed(amount: Int)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  5. Pusta linia oddziela fragmenty źródła.
  6. async fn produce(target: Stream<Int>, count: Int) {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  7. for i in range(1, count + 1) {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  8. await target.send(i * i)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  9. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  10. target.close()Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  11. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  12. Pusta linia oddziela fragmenty źródła.
  13. async fn slow(ms: Int) -> Int {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  14. await delay(milliseconds(ms))Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  15. return msZwrócenie wartości z funkcji; nie jest zapisem do dziennika.
  16. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  17. Pusta linia oddziela fragmenty źródła.
  18. // Handler zdarzenia (może leżeć w dowolnym module pluginu).Komentarz autora; nie jest wykonywany.
  19. on order.placed(amount: Int) {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  20. log.info("handler: zamówienie " + toString(amount))Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  21. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  22. Pusta linia oddziela fragmenty źródła.
  23. // Dodatkowy subskrybent o zgodnej sygnaturze, dołączany i odłączany w czasie działania.Komentarz autora; nie jest wykonywany.
  24. fn extra(amount: Int) {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  25. log.info("subskrybent: zamówienie " + toString(amount))Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  26. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  27. Pusta linia oddziela fragmenty źródła.
  28. fn Start() -> String {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  29. let first = slow(20)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  30. let second = slow(30)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  31. let sum = await first + await secondWiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  32. Pusta linia oddziela fragmenty źródła.
  33. let squares: Stream<Int> = stream(2)Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  34. produce(squares, 4)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  35. var total = 0Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  36. for await value in squares {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  37. total = total + valueOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  38. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  39. Pusta linia oddziela fragmenty źródła.
  40. var late = "nie"Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  41. try {Sterowanie lub obsługa błędu KretS; szczegóły określa referencja tej konstrukcji.
  42. let never = await timeout(milliseconds(10), slow(500))Wiązanie wartości; typ i możliwość zmiany zależą od użytej deklaracji.
  43. late = toString(never)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  44. } catch problem {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  45. late = "przekroczony"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  46. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  47. Pusta linia oddziela fragmenty źródła.
  48. subscribe order.placed with extraOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  49. emit order.placed(5)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  50. unsubscribe order.placed with extraOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  51. emit order.placed(1)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  52. Pusta linia oddziela fragmenty źródła.
  53. return "zadania " + toString(sum) + "; strumień " + toString(total) + "; limit " + lateZwrócenie wartości z funkcji; nie jest zapisem do dziennika.
  54. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  55. Pusta linia oddziela fragmenty źródła.
  56. fn Shutdown() {Sygnatura funkcji: nazwa, argumenty i ewentualny typ wyniku.
  57. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  58. Pusta linia oddziela fragmenty źródła.

Wynik i typowy błąd

„zadania 50; strumień 30; limit przekroczony”; w dzienniku dwa wpisy handlera i jeden wpis subskrybenta (po `unsubscribe` subskrybent nie dostaje drugiego zdarzenia).

Na co uważać

Oczekiwanie równoległości: wszystkie zadania jednej maszyny działają na jednym wątku. Maszyna wykrywa zakleszczenie (wszystkie zadania czekają) i zgłasza błąd.

Wymagania wersji i procedura lokalna

sdk
1.0.0-rc.3+kret.local.3
sdkInfoReports
1.0.0-rc.3
core
1.0.0-test.6.11-draft.1
os
Windows 11 x64
dotnet
.NET 10 runtime

Polecenia poniżej są instrukcją do samodzielnego wykonania z właściwym lokalnym SDK. DATA/OUT muszą wskazywać nowe katalogi testowe. Nie ma przycisku uruchamiania na serwerze.

  1. checkkret check . --jsonKatalog: project · Oczekiwany kod wyjścia: 0
  2. runkret run . --policy host-policy.json --data {DATA}Katalog: project · Oczekiwany kod wyjścia: 0

Wyniki zapisane w pakiecie źródłowym

To dowód z eksportu, nie wynik bieżącego wykonania w przeglądarce.

# EXPECTED_OUTPUT — KRETS-A02-AsyncStreamsEvents
# Rzeczywisty wynik uruchomienia (SDK 1.0.0-rc.3+kret.local.3, 2026-11-01T12:46:36Z). Ścieżki zastąpione znacznikami <project>, <data>, <out>, <sdk>.
# Actual output of the run. Paths replaced by placeholders.

### 1. check  (exit 0, PASS)
> kret check . --json
{
  "format": "kret-diagnostics/1",
  "project": "<project>",
  "succeeded": true,
  "plugin": {
    "id": "LOCAL-KPL-KSA2ASYN",
    "name": "AsyncStreamsEvents",
    "version": "1.0.0",
    "profile": "standard",
    "database": false
  },
  "permissions": {
    "required": [
      "logs.own.write"
    ],
    "optional": []
  },
  "handlers": {
    "lifecycle": [
      "start",
      "shutdown"
    ],
    "events": [],
    "commands": []
  },
  "diagnostics": [
    {
      "file": "<project>\\Script\\Main.krs",
      "line": 6,
      "column": 26,
      "endLine": 6,
      "endColumn": 37,
      "severity": "warning",
      "code": "KCS-KRS-1031",
      "message": "Stream\u003CInt64\u003E jest konstrukcj\u0105 eksperymentaln\u0105 (D-KCS-13): pe\u0142ny transport strumieni nie zosta\u0142 zatwierdzony i Stream\u003CT\u003E nie nale\u017Cy do kontraktu Stable 1.0"
    },
    {
      "file": "<project>\\Script\\Main.krs",
      "line": 33,
      "column": 18,
      "endLine": 33,
      "endColumn": 29,
      "severity": "warning",
      "code": "KCS-KRS-1031",
      "message": "Stream\u003CInt64\u003E jest konstrukcj\u0105 eksperymentaln\u0105 (D-KCS-13): pe\u0142ny transport strumieni nie zosta\u0142 zatwierdzony i Stream\u003CT\u003E nie nale\u017Cy do kontraktu Stable 1.0"
    }
  ]
}

### 2. run  (exit 0, PASS)
> kret run . --policy host-policy.json --data {DATA}
{
  "broker": {
    "pid": 44944,
    "startupMs": 40.6881,
    "pluginHostSha256": "93405d128c95234d913efcd6e28fe54073caa0375135a2184290f958e7f7cfe5",
    "allowProvisionalRisk": true,
    "memoryIdle": {
      "managedBytes": 1193376,
      "allocatedBytes": 1190736,
      "workingSetBytes": 32518144,
      "privateBytes": 10072064,
      "peakWorkingSetBytes": 32518144,
      "cpuMs": 93.75
    }
  },
  "brokerWithPlugins": {
    "memory": {
      "managedBytes": 1555520,
      "allocatedBytes": 1552376,
      "workingSetBytes": 38899712,
      "privateBytes": 13828096,
      "peakWorkingSetBytes": 38903808,
      "cpuMs": 171.875
    }
  },
  "plugins": [
    {
      "package": "<project>\\Build",
      "admitted": true,
      "startMs": 146.4427,
      "subject": "LOCAL-KPL-KSA2ASYN",
      "instance": "01a19725-bfab-77e8-ae10-47142d2d69c3",
      "pid": 22112,
      "jobObject": true,
      "isolation": {
        "level": "Restricted",
        "restrictedToken": true,
        "lowIntegrity": true,
        "appContainer": false
      },
      "limits": {
        "profile": "standard",
        "scriptMemoryBytes": 67108864,
        "processMemoryBytes": 201326592,
        "cpuPercent": 25,
        "maxInstructions": 50000000,
        "clamped": []
      },
      "calls": [
        {
          "operation": "start",
          "ok": true,
          "status": "Completed",
          "type": "String",
          "value": "zadania 50; strumie\u0144 30; limit przekroczony",
          "brokerMs": 69.9046,
          "vmMs": 66.0906,
          "instructions": 296,
          "hostCalls": 3,
          "pluginReportedMemory": {
            "managedBytes": 793032,
            "allocatedBytes": 790824,
            "workingSetBytes": 32555008,
            "privateBytes": 11231232,
            "peakWorkingSetBytes": 32555008,
            "cpuMs": 78.125
          }
        },
        {
          "operation": "shutdown",
          "ok": true,
          "status": "Completed",
          "type": "Unit",
          "value": null,
          "brokerMs": 0.5243,
          "vmMs": 0.001,
          "instructions": 1,
          "hostCalls": 0,
          "pluginReportedMemory": {
            "managedBytes": 798616,
            "allocatedBytes": 796384,
            "workingSetBytes": 32563200,
            "privateBytes": 11231232,
            "peakWorkingSetBytes": 32563200,
            "cpuMs": 78.125
          }
        }
      ],
      "processMemoryMeasuredByBroker": {
        "workingSetBytes": 32555008,
        "privateBytes": 11231232,
        "peakWorkingSetBytes": 32555008,
        "cpuMs": 93.75
      },
      "summary": {
        "exitCode": 0,
        "killed": false,
        "hostCalls": 3,
        "denials": 0,
        "peakCommitBytes": 12050432,
        "log": [
          "[info] handler: zam\u00F3wienie 5",
          "[info] subskrybent: zam\u00F3wienie 5",
          "[info] handler: zam\u00F3wienie 1"
        ]
      }
    }
  ],
  "brokerAfterClose": {
    "memory": {
      "managedBytes": 590448,
      "allocatedBytes": 1552376,
      "workingSetBytes": 39829504,
      "privateBytes": 14413824,
      "peakWorkingSetBytes": 39829504,
      "cpuMs": 171.875
    }
  },
  "audit": {
    "entries": 12,
    "denials": 0,
    "grantsIssued": 1,
    "denied": []
  },
  "exitCode": 0
}


Czytanie kodu linia po linii

Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.

  1. # EXPECTED_OUTPUT — KRETS-A02-AsyncStreamsEventsOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. # Rzeczywisty wynik uruchomienia (SDK 1.0.0-rc.3+kret.local.3, 2026-11-01T12:46:36Z). Ścieżki zastąpione znacznikami <project>, <data>, <out>, <sdk>.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  3. # Actual output of the run. Paths replaced by placeholders.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  4. Pusta linia oddziela fragmenty źródła.
  5. ### 1. check (exit 0, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  6. > kret check . --jsonOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  7. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  8. "format": "kret-diagnostics/1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  9. "project": "<project>",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  10. "succeeded": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  11. "plugin": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  12. "id": "LOCAL-KPL-KSA2ASYN",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  13. "name": "AsyncStreamsEvents",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  14. "version": "1.0.0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  15. "profile": "standard",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  16. "database": falsePole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  17. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  18. "permissions": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  19. "required": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  20. "logs.own.write"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  21. ],Zamknięcie struktury otwartej we wcześniejszych liniach.
  22. "optional": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  23. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  24. "handlers": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  25. "lifecycle": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  26. "start",Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  27. "shutdown"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  28. ],Zamknięcie struktury otwartej we wcześniejszych liniach.
  29. "events": [],Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  30. "commands": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  31. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  32. "diagnostics": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  33. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  34. "file": "<project>\\Script\\Main.krs",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  35. "line": 6,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  36. "column": 26,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  37. "endLine": 6,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  38. "endColumn": 37,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  39. "severity": "warning",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  40. "code": "KCS-KRS-1031",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  41. "message": "Stream\u003CInt64\u003E jest konstrukcj\u0105 eksperymentaln\u0105 (D-KCS-13): pe\u0142ny transport strumieni nie zosta\u0142 zatwierdzony i Stream\u003CT\u003E nie nale\u017Cy do kontraktu Stable 1.0"Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  42. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  43. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  44. "file": "<project>\\Script\\Main.krs",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  45. "line": 33,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  46. "column": 18,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  47. "endLine": 33,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  48. "endColumn": 29,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  49. "severity": "warning",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  50. "code": "KCS-KRS-1031",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  51. "message": "Stream\u003CInt64\u003E jest konstrukcj\u0105 eksperymentaln\u0105 (D-KCS-13): pe\u0142ny transport strumieni nie zosta\u0142 zatwierdzony i Stream\u003CT\u003E nie nale\u017Cy do kontraktu Stable 1.0"Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  52. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  53. ]Zamknięcie struktury otwartej we wcześniejszych liniach.
  54. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  55. Pusta linia oddziela fragmenty źródła.
  56. ### 2. run (exit 0, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  57. > kret run . --policy host-policy.json --data {DATA}Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  58. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  59. "broker": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  60. "pid": 44944,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  61. "startupMs": 40.6881,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  62. "pluginHostSha256": "93405d128c95234d913efcd6e28fe54073caa0375135a2184290f958e7f7cfe5",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  63. "allowProvisionalRisk": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  64. "memoryIdle": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  65. "managedBytes": 1193376,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  66. "allocatedBytes": 1190736,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  67. "workingSetBytes": 32518144,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  68. "privateBytes": 10072064,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  69. "peakWorkingSetBytes": 32518144,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  70. "cpuMs": 93.75Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  71. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  72. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  73. "brokerWithPlugins": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  74. "memory": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  75. "managedBytes": 1555520,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  76. "allocatedBytes": 1552376,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  77. "workingSetBytes": 38899712,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  78. "privateBytes": 13828096,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  79. "peakWorkingSetBytes": 38903808,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  80. "cpuMs": 171.875Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  81. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  82. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  83. "plugins": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  84. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  85. "package": "<project>\\Build",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  86. "admitted": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  87. "startMs": 146.4427,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  88. "subject": "LOCAL-KPL-KSA2ASYN",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  89. "instance": "01a19725-bfab-77e8-ae10-47142d2d69c3",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  90. "pid": 22112,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  91. "jobObject": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  92. "isolation": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  93. "level": "Restricted",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  94. "restrictedToken": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  95. "lowIntegrity": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  96. "appContainer": falsePole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  97. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  98. "limits": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  99. "profile": "standard",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  100. "scriptMemoryBytes": 67108864,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  101. "processMemoryBytes": 201326592,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  102. "cpuPercent": 25,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  103. "maxInstructions": 50000000,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  104. "clamped": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  105. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  106. "calls": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  107. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  108. "operation": "start",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  109. "ok": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  110. "status": "Completed",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  111. "type": "String",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  112. "value": "zadania 50; strumie\u0144 30; limit przekroczony",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  113. "brokerMs": 69.9046,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  114. "vmMs": 66.0906,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  115. "instructions": 296,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  116. "hostCalls": 3,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  117. "pluginReportedMemory": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  118. "managedBytes": 793032,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  119. "allocatedBytes": 790824,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  120. "workingSetBytes": 32555008,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  121. "privateBytes": 11231232,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  122. "peakWorkingSetBytes": 32555008,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  123. "cpuMs": 78.125Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  124. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  125. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  126. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  127. "operation": "shutdown",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  128. "ok": true,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  129. "status": "Completed",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  130. "type": "Unit",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  131. "value": null,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  132. "brokerMs": 0.5243,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  133. "vmMs": 0.001,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  134. "instructions": 1,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  135. "hostCalls": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  136. "pluginReportedMemory": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  137. "managedBytes": 798616,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  138. "allocatedBytes": 796384,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  139. "workingSetBytes": 32563200,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  140. "privateBytes": 11231232,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  141. "peakWorkingSetBytes": 32563200,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  142. "cpuMs": 78.125Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  143. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  144. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  145. ],Zamknięcie struktury otwartej we wcześniejszych liniach.
  146. "processMemoryMeasuredByBroker": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  147. "workingSetBytes": 32555008,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  148. "privateBytes": 11231232,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  149. "peakWorkingSetBytes": 32555008,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  150. "cpuMs": 93.75Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  151. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  152. "summary": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  153. "exitCode": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  154. "killed": false,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  155. "hostCalls": 3,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  156. "denials": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  157. "peakCommitBytes": 12050432,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  158. "log": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  159. "[info] handler: zam\u00F3wienie 5",Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  160. "[info] subskrybent: zam\u00F3wienie 5",Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  161. "[info] handler: zam\u00F3wienie 1"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  162. ]Zamknięcie struktury otwartej we wcześniejszych liniach.
  163. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  164. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  165. ],Zamknięcie struktury otwartej we wcześniejszych liniach.
  166. "brokerAfterClose": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  167. "memory": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  168. "managedBytes": 590448,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  169. "allocatedBytes": 1552376,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  170. "workingSetBytes": 39829504,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  171. "privateBytes": 14413824,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  172. "peakWorkingSetBytes": 39829504,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  173. "cpuMs": 171.875Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  174. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  175. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  176. "audit": {Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  177. "entries": 12,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  178. "denials": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  179. "grantsIssued": 1,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  180. "denied": []Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  181. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  182. "exitCode": 0Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  183. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  184. Pusta linia oddziela fragmenty źródła.
  185. Pusta linia oddziela fragmenty źródła.
Diagnostyka i raporty testów

{
  "format": "kretos-web-playground-diagnostics/1",
  "exampleId": "KRETS-A02-AsyncStreamsEvents",
  "sdk": "1.0.0-rc.3+kret.local.3",
  "origin": "PRECOMPUTED",
  "diagnostics": [
    {
      "id": "diag.KRETS-A02-AsyncStreamsEvents.1.1",
      "exampleId": "KRETS-A02-AsyncStreamsEvents",
      "step": 1,
      "stepName": "check",
      "command": "kret check . --json",
      "exitCode": 0,
      "file": "Script/Main.krs",
      "line": 6,
      "column": 26,
      "endLine": 6,
      "endColumn": 37,
      "severity": "warning",
      "code": "KCS-KRS-1031",
      "message": "Stream<Int64> jest konstrukcją eksperymentalną (D-KCS-13): pełny transport strumieni nie został zatwierdzony i Stream<T> nie należy do kontraktu Stable 1.0",
      "origin": "PRECOMPUTED (kret check, SDK 1.0.0-rc.3+kret.local.3)"
    },
    {
      "id": "diag.KRETS-A02-AsyncStreamsEvents.1.2",
      "exampleId": "KRETS-A02-AsyncStreamsEvents",
      "step": 1,
      "stepName": "check",
      "command": "kret check . --json",
      "exitCode": 0,
      "file": "Script/Main.krs",
      "line": 33,
      "column": 18,
      "endLine": 33,
      "endColumn": 29,
      "severity": "warning",
      "code": "KCS-KRS-1031",
      "message": "Stream<Int64> jest konstrukcją eksperymentalną (D-KCS-13): pełny transport strumieni nie został zatwierdzony i Stream<T> nie należy do kontraktu Stable 1.0",
      "origin": "PRECOMPUTED (kret check, SDK 1.0.0-rc.3+kret.local.3)"
    }
  ]
}
Czytanie kodu linia po linii

Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.

  1. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. "format": "kretos-web-playground-diagnostics/1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  3. "exampleId": "KRETS-A02-AsyncStreamsEvents",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  4. "sdk": "1.0.0-rc.3+kret.local.3",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  5. "origin": "PRECOMPUTED",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  6. "diagnostics": [Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  7. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  8. "id": "diag.KRETS-A02-AsyncStreamsEvents.1.1",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  9. "exampleId": "KRETS-A02-AsyncStreamsEvents",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  10. "step": 1,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  11. "stepName": "check",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  12. "command": "kret check . --json",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  13. "exitCode": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  14. "file": "Script/Main.krs",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  15. "line": 6,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  16. "column": 26,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  17. "endLine": 6,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  18. "endColumn": 37,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  19. "severity": "warning",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  20. "code": "KCS-KRS-1031",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  21. "message": "Stream<Int64> jest konstrukcją eksperymentalną (D-KCS-13): pełny transport strumieni nie został zatwierdzony i Stream<T> nie należy do kontraktu Stable 1.0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  22. "origin": "PRECOMPUTED (kret check, SDK 1.0.0-rc.3+kret.local.3)"Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  23. },Zamknięcie struktury otwartej we wcześniejszych liniach.
  24. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  25. "id": "diag.KRETS-A02-AsyncStreamsEvents.1.2",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  26. "exampleId": "KRETS-A02-AsyncStreamsEvents",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  27. "step": 1,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  28. "stepName": "check",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  29. "command": "kret check . --json",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  30. "exitCode": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  31. "file": "Script/Main.krs",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  32. "line": 33,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  33. "column": 18,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  34. "endLine": 33,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  35. "endColumn": 29,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  36. "severity": "warning",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  37. "code": "KCS-KRS-1031",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  38. "message": "Stream<Int64> jest konstrukcją eksperymentalną (D-KCS-13): pełny transport strumieni nie został zatwierdzony i Stream<T> nie należy do kontraktu Stable 1.0",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  39. "origin": "PRECOMPUTED (kret check, SDK 1.0.0-rc.3+kret.local.3)"Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  40. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  41. ]Zamknięcie struktury otwartej we wcześniejszych liniach.
  42. }Zamknięcie struktury otwartej we wcześniejszych liniach.
Pochodzenie i integralność

KRET_LANGUAGE_KRETS.zip:KretS/Examples/ADVANCED_AsyncStreamsEvents/example.json

02_PLAYGROUND/EXAMPLES/KRETS-A02-AsyncStreamsEvents.json
SHA-256 40396680F4366723FBAEA03087745B963123FDCB1363F424DB2F435787A7ABAA

Materiały źródłowe do tego tematu

Przeczytaj powiązane rozdziały. Kod i kontrakty zachowano z importu; historia źródeł jest dostępna przy każdym rozdziale.

KRETS-A02-AsyncStreamsEvents — Zadania, strumienie i zdarzenia [2.0]

KRETS-A02-AsyncStreamsEvents — Zadania, strumienie i zdarzenia [2.0]

🇬🇧 English version below.
PoleWartość
TechnologiaKretS
PoziomADVANCED
KlasyfikacjaRUNNABLE_LOCAL — Uruchamialny lokalnie (SDK, izolowany proces pluginu)
PlaygroundLOCAL_EXECUTE — lokalnie: wykonanie w KretStudio / SDK (publicznie: tylko statycznie)
SDK1.0.0-rc.3+kret.local.3 (kandydat lokalny, niepodpisany)
Wynik testuTEST_RESULTS.json, rzeczywisty wynik: EXPECTED_OUTPUT.txt

Co pokazuje

async fn i await (zadania współbieżne, nie równoległe), Stream<Int> z buforem i for await, timeout obsłużony w try/catch, deklaracja event, handler on, emit oraz subscribe … with.

Pliki

Plik
Script/Main.krs
host-policy.json
plugin.kretl

Jak uruchomić

Katalog roboczy: katalog tego przykładu. kret oznacza <SDK>\Compiler\kret.exe, kretui-host — <SDK>\UiHost\kretui-host.exe. {DATA} / {OUT} to nowe, puste katalogi poza projektem. Wymagania: REQUIREMENTS.md.

  1. kret check . --json — walidacja
  2. kret run . --policy host-policy.json --data {DATA} — uruchomienie

Oczekiwany wynik

„zadania 50; strumień 30; limit przekroczony”; w dzienniku dwa wpisy handlera i jeden wpis subskrybenta (po unsubscribe subskrybent nie dostaje drugiego zdarzenia).

Najczęstszy błąd

Oczekiwanie równoległości: wszystkie zadania jednej maszyny działają na jednym wątku. Maszyna wykrywa zakleszczenie (wszystkie zadania czekają) i zgłasza błąd.

Otwórz cały rozdział ze źródłem →

Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →

Wybierz, co możemy zapamiętać w tej przeglądarce. Możesz zmienić decyzję w każdej chwili.

Polityka prywatności