# والنار و لا تفعل *الـ مـا مـا قبل* - النسيان بالاعدام الاقتصادي بدون دولة

<!--category-- ASP.NET, Architecture, CQRS, Systems Design, Async, Privacy-Safe Design -->
<datetime class="hidden">2025-12-12T12:00</datetime>

أكثر أنظمة الـ إلى تذكّر أكثر من اللازم (اللوحات، الطوابير، الخردة المستمرة التي لا تريدها أبداً) أو أنها لا تتذكر شيئاً على الإطلاق (الثقوب السوداء المشتعلة والنسيان التي تختفي لحظة حدوث خطأ ما).

تُدخل هذه المادة شيئاً مختلفاً:

> A نمط حيث تصبح كل عملية Async عملية صغيرة **طراز SALL**, **المعاينة**, **إعادة صلاح إعادة صلاح**, **وحدة العمل الخاصة للتنظيف الذاتي** -والنظام بأكمله يبقى خاصّاً، مربوطاً، سريع، وحاسماً

إنها مرافقة مقالتي السابقة **[تعلّم LRUs - عندما تتخطى القدرة تجعل نظامك افضل](/blog/learning-lrus-when-capacity-makes-systems-better)**الذي واحد إستكشفَ كَمْ الذاكرة المُحَدّدة + إنتهاء يُصبحُ a آلية بقاء.

هذا يستكشف النصف الآخر: **التنفيذ الانجازي والاعدام** - كيف أن عازلاً متدحرجاً صغيراً من المهام النشطة يصبح مصححاً، سجل حدث، ومحرك إعادة تشغيل، دون الاحتفاظ بأي بيانات مستخدم.

هذا المثال يأتي من ترجمة مدونتي UI - وهي عبارة عن مجموعة صغيرة لترجمة محتوى العلامة التنازلية على الجو. تبدو تافهة. تحت غطاء محرك السيارة، تنفذ أنماطاً يمكنك سرقتها من أجل أي سير عمل متأرجح.

هذا **الجزء الأول** من سلسلة من جزأين:

- **الجزء الأول (هذه المادة)**النظرية والنمط ومثال العالم الحقيقي
- **[الجزء 2: بناء مكتبة تنفيذ اقتصادي يمكن إعادة استخدامها](/blog/ephemeral-execution-library)**:: التنفيذ الكامل مع إدماج استراتيجية التنفيذ المتكاملة

## ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن ن نو!! !

[هذا هو الآن في معظم الغالب liflucyd.ephimmerals Nuget حزمة أيضا أكثر من 20](https://www.nuget.org/packages?q=mostlylucid&includeComputedFrameworks=true&prerel=true&sortby=created-desc).

[![](https://img.shields.io/nuget/v/mostlylucid.ephemeral.svg)](https://www.nuget.org/packages/mostlylucid.ephemeral)
[![الرخصة](https://img.shields.io/badge/license-Unlicense-blue.svg)](../../UNLICENSE)

[TOC]

---


## المشكلة - Assync العمل تدفقات إنشاء الحالة المخفية

ويميل مطورو الشبكة إلى الاختيار من ثلاثة خيارات سيئة:

### واو - النار والنسيان

- - - - - - - - - - - - - `Task.Run()` لا علاقة، لا إعادة بناء، لا فكرة عمّا فشل.

### الحريق والانتظار في انتظار

أنت تحجب الخيوط التي لا يجب أن تحجبها.

### الصور/القنوات في كل مكان

الآن لديك:

- غير مورد
- استمرار الدولة التي لم تقصد أن تبقيها
- PSII تم تخزينها في مكان ما
- نظام متوزّع حيث تريد فقط عملية بسيطة

### التعقب الموزع

مفيد لكن خارجي أيضاً لا يمكنه إعادة أي شيء و كثيراً ما يسرب البيانات التي لم تنوي تخزينها

ما نريده في الواقع هو:

- **طراز SS**
- ****
- ****
- **المعاينة**
- **مُصدِر مُصْرِف**
- **قابلة للاسترجاع إذا دعت الحاجة**
- **ومن ثم ذهبت**

ذاكرة "فقط طويلة بما فيه الكفاية" لما يفعله النظام - ولا شيء أكثر من ذلك.

---


## أولاً - تنظيم *ليس تماماً* انسي النسيان

هذه هي الفكرة في جملة واحدة:

> **ابدأ عملية Ayync فوراً، تعقبها بشكل صريح من خلال مهمّة مكمّلة Source، تنظيفها بشكل تحديدي، والحفاظ على عازل متدحرج صغير للمهمّات القليلة الأخيرة حتى تتمكن من فحصها أو استعادتها - دون الاحتفاظ بأي محتوى مستخدم.**

يقع في منتصف الطريق بين:

- (بدولارات الولايات المتحدة)
- 1 ف-5، 1 ف-4، 1 ف-3، 1 خ ع (رأ)، 1 خ ع (رأ)، 1 خ ع (رأ)، 1 خ ع (رأ)، 1 خ ع (رأ)، 1 خ ع (رأ)
- 
- المستقبل/الآجلات
- دورتيـن دراسيـة

من دون أن يصبح أي منهم

```mermaid
flowchart TB
    subgraph Client["Client Request"]
        R[Start Translation]
    end

    subgraph API["API Layer"]
        A[Create TaskId] --> B[Create TaskCompletionSource]
        B --> C[Queue to Channel]
        C --> D[Return TaskId Immediately]
    end

    subgraph Cache["Ephemeral Cache (Bounded)"]
        E[Store TranslateTask]
        F[Max 5 per user]
        G[6hr absolute / 1hr sliding expiry]
    end

    subgraph Worker["Background Worker"]
        H[Read from Channel]
        H --> I[Execute Translation]
        I --> J[Complete TCS]
    end

    R --> A
    B --> E
    E --> F --> G
    C --> H

    style Cache fill:none,stroke:#10b981,stroke-width:2px
    style Worker fill:none,stroke:#6366f1,stroke-width:2px
```

---


## اَقْرَانٍ مِنَ مَثَلَةٍ كَهَمِ إِمِيمِيَةٍ

هيكل البيانات الأساسية هو: `TranslateTask` - وحدة تنفيذ ذرية صغيرة جداً يدعمها `Task<TaskCompletion>`:

```csharp
// From TranslateTask.cs
public class TranslateTask(
    string taskId,
    DateTime startTime,
    string language,
    Task<TaskCompletion>? task)
    : TranslateResultTask(taskId, startTime, language)
{
    public Task<TaskCompletion>? Task { get; init; } = task;
}

public record TaskCompletion(
    string? TranslatedMarkdown,
    string OriginalMarkdown,
    string Language,
    bool Complete,
    DateTime? EndTime);
```

وهي تحتوي على ما يلي:

- تعريف فريد من نوعه (يعبر كامل التدفق)
- A وقت المزامر (عندما بدأ)
- البيانات الفوقية (اللغة - لا محتوى المستخدم!)
- (أ) إشارة إلى `Task<TaskCompletion>`
- المدة (المحسوبة على إمكانية الوصول)
- حالة مُنتج من حالة المهمة
- النتيجة النهائية (فقط إذا اكتملت بنجاح)

هذا كل شيء، لا شيء مستمر، لا شيء مكتوب على القرص، لا شيء مخزّن خلف النافذة المتداولة.

AWS لديها وظائف متدرجة. الأزور له وظائف دائمة. لديك... 30 سطر من الرموز التي لا تتطلب فاتورة سحابة.

---


## المهمّة المُكمّل المُهَمّة المُتَزَمَة المُسَبَبْطَة - الحَرَف المُدَفَّع و المُنْزَهَة للحَرَقِ و التَثْقَب

والسحر الذي يحدث في `BackgroundTranslateService`بدلاً من النار والنسيان، نستخدم [المهمة المُمَلْس المصدر](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.taskcompletionsource-1) - بناء مثل الوعد الذي يسمح لنا بالعودة على الفور بينما العمل يحدث في الخلفية.

```csharp
// From BackgroundTranslateService.cs
private readonly Channel<(PageTranslationModel, TaskCompletionSource<TaskCompletion>)>
    _translations = Channel.CreateUnbounded<(PageTranslationModel, TaskCompletionSource<TaskCompletion>)>();

private async Task<Task<TaskCompletion>> Translate(PageTranslationModel message)
{
    // Create a TaskCompletionSource that will eventually hold the result
    var tcs = new TaskCompletionSource<TaskCompletion>();

    // Send the translation request along with the TCS to be processed
    await _translations.Writer.WriteAsync((message, tcs));

    // Return the Task immediately -caller can await it or check status later
    return tcs.Task;
}
```

### ما هي مهمة التملص من المصدر؟

إذا لم تستخدم `TaskCompletionSource<T>` النظر إليها على أنها **وعداً بأنّك تتحكّم يدوياً**على سبيل المثال منظّم `Task` الذي يكمّل عندما ينتهي عمله، يكمّل TCS متى *- - - - - - - - - - -* نداء مُتّ اتصل `SetResult()`, `SetException()`أو `SetCanceled()`.

هذا يسمح لك:

1.  `Task` إلى المُتَّصل فوراً
2. القيام بالعمل الفعلي في مكان آخر (مختلف الخيط، الخدمة الخلفية، وما إلى ذلك)
3. يجري تحميل *- - - - - - - - - - -* يُقَرّر أنه مُعْمَل

إنه الجسر بين "النيران والنسيان" و "النيران والمسار"

---


## الـ پ واسطة الـ ABI - ابتدإ ترجمة

عندما ينقر مستخدم على "تفضّل"، فإن الواجهة الأمامية تدعو API:

```javascript
// From translations.js
fetch('/api/translate/start-translation', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        Language: shortCode,
        OriginalMarkdown: markdown
    })
})
.then(response => response.json())
.then(taskId => {
    // Got a taskId immediately -translation is running in background
    console.log("Task ID:", taskId);

    // Poll for updates via HTMX
    htmx.ajax('get', "/editor/get-translations", {
        target: '#translations',
        swap: 'innerHTML'
    });
});
```

الدالة API ترجع فوراً مع فقط a مهمّة تعريف:

```csharp
// From TranslateAPI.cs
[HttpPost("start-translation")]
public async Task<Results<Ok<string>, BadRequest<string>>> StartTranslation(
    [FromBody] MarkdownTranslationModel model)
{
    if (!backgroundTranslateService.TranslationServiceUp)
        return TypedResults.BadRequest("Translation service is down");

    // Create a unique identifier for this translation task
    var taskId = Guid.NewGuid().ToString("N");
    var userId = Request.GetUserId(Response);

    // Trigger translation -returns Task<TaskCompletion> immediately
    var translationTask = await backgroundTranslateService.Translate(model);

    // Wrap it in our trackable TranslateTask
    var translateTask = new TranslateTask(taskId, DateTime.Now, model.Language, translationTask);

    // Store in the ephemeral cache (bounded, self-cleaning)
    translateCacheService.AddTask(userId, translateTask);

    // Return the task ID to the client -they can poll for status
    return TypedResults.Ok(taskId);
}
```

الإستجابة فورية. الترجمة الفعلية تعمل في الخلفية. المستخدم يمكن أن يستطلع أو يشاهد فقط تحديث UI.

---


## عملية التدوير نافذة - مَعْجِز ذاتي الانانية

ثانياً - التبصيـرة الرئيسيـة مـن [أولاً - المادة من الاتحاد الروسي](/blog/learning-lrus-when-capacity-makes-systems-better) ينطبق هنا أيضاً:

> **الاحتفاظ بما يكفي من التاريخ لإزالة الحشرة والعقل حول النظام... وترك التحلل الطبيعي يمحو كل شيء آخر.**

```csharp
// From TranslateCacheService.cs
public class TranslateCacheService(IMemoryCache memoryCache)
{
    public void AddTask(string userId, TranslateTask task)
    {
        if (memoryCache.TryGetValue(userId, out CachedTasks? tasks))
        {
            var currentTasks = tasks?.Tasks ?? new List<TranslateTask>();
            currentTasks = currentTasks.OrderByDescending(x => x.StartTime).ToList();

            // Keep only the 5 most recent tasks -bounded window
            if (currentTasks.Count >= 5)
            {
                var lastTask = currentTasks.Last();
                currentTasks.Remove(lastTask);
            }

            currentTasks.Add(task);
            currentTasks = currentTasks.OrderByDescending(x => x.StartTime).ToList();
            tasks!.Tasks = currentTasks;

            memoryCache.Set(userId, tasks, new MemoryCacheEntryOptions
            {
                AbsoluteExpiration = tasks.AbsoluteExpiration,
                SlidingExpiration = TimeSpan.FromHours(1)
            });
        }
        else
        {
            // First task for this user
            var cachedTasks = new CachedTasks
            {
                Tasks = new List<TranslateTask> { task },
                AbsoluteExpiration = DateTime.Now.AddHours(6)
            };
            memoryCache.Set(userId, cachedTasks, new MemoryCacheEntryOptions
            {
                AbsoluteExpiration = cachedTasks.AbsoluteExpiration,
                SlidingExpiration = TimeSpan.FromHours(1)
            });
        }
    }

    public List<TranslateTask> GetTasks(string userId)
    {
        if (memoryCache.TryGetValue(userId, out CachedTasks? tasks))
            return tasks?.Tasks ?? new List<TranslateTask>();
        return new List<TranslateTask>();
    }

    private class CachedTasks
    {
        public List<TranslateTask> Tasks { get; set; } = new();
        public DateTime AbsoluteExpiration { get; set; }
    }
}
```

كل مهمة جديدة:

- أُضيفت إلى نافذة المستخدم المتداولة
- يدفع خارج الأقدم إذا كنا في القدرة على (5 درجة مئوية)
- تُبخرات تماماً بعد 6 ساعات (الإبسولات) أو ساعة واحدة من الخمول (التزلق)

```mermaid
flowchart LR
    subgraph Window["Per-User Task Window (Max 5)"]
        T1[Oldest Task] --- T2[Older] --- T3[Recent] --- T4[Newer] --- T5[Newest]
    end

    New[New Task] -->|Enqueue| Window
    T1 -->|Evicted| Gone[(Expired)]

    style Window fill:none,stroke:#10b981,stroke-width:2px
    style Gone fill:none,stroke:#ef4444,stroke-width:2px
```

لا توجد مخاطرة تتعلق بالاحتجاز. لا يوجد PCI في الخزينة (فقط هويات المهام، وازمنات الطوابع، ورموز اللغات). لا يوجد صداع في الناتج المحلي الإجمالي.

---


## اتفاقية مفروضة - الحاكم لوب

تُنفِّذ خدمة المعلومات الأساسية **** الحلقة التي تستخدم قار قارة وق `Task.WhenAny`:

```csharp
// From BackgroundTranslateService.cs
private async Task TranslateFilesAsync(CancellationToken cancellationToken)
{
    var processingTasks = new List<Task>();

    while (!cancellationToken.IsCancellationRequested)
    {
        // Fill up to IPCount concurrent tasks (e.g., 4 parallel translations)
        while (processingTasks.Count < markdownTranslatorService.IPCount &&
               !cancellationToken.IsCancellationRequested)
        {
            var item = await _translations.Reader.ReadAsync(cancellationToken);
            var translateModel = item.Item1;
            var tcs = item.Item2;

            // Start the task and add it to the list
            var task = TranslateTask(cancellationToken, translateModel, item, tcs);
            processingTasks.Add(task);
        }

        // Wait for ANY of the tasks to complete
        var completedTask = await Task.WhenAny(processingTasks);
        processingTasks.Remove(completedTask);

        // Handle exceptions if needed
        try
        {
            await completedTask;
        }
        catch (Exception ex)
        {
            logger.LogError(ex, "Error translating markdown");
        }
    }
}
```

هذا هو مثل a **الحاكم الحاكم على المحرك البخاري**: المزيد من الحمل / الضغط الخلفي يبني o constructing o construction o consulting o constable.

النمط يعطيك:

- **لا يوجد زيادة في الحمولة** - لا يمكن توليد مهام غير محدودة
- **السلوك في الوقت الحقيقي** - في وقت متأخر - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- **- إنجيل - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -** -النيّة تَعْوِضُ المُسْمَات
- **تثبيت الثبات تحت الحمل** -مُقَدَّمَاتُ مُعَلَّةً

---


## اكمال المهمة

عندما تنتهي عملية الترجمة الفعلية نكمل العملية

```csharp
// From BackgroundTranslateService.cs
private async Task TranslateTask(
    CancellationToken cancellationToken,
    PageTranslationModel translateModel,
    (PageTranslationModel, TaskCompletionSource<TaskCompletion>) item,
    TaskCompletionSource<TaskCompletion> tcs)
{
    try
    {
        await retryPolicy.ExecuteAsync(async () =>
        {
            // Do the actual translation work
            var translatedMarkdown = await markdownTranslatorService.TranslateMarkdown(
                translateModel.OriginalMarkdown,
                translateModel.Language,
                cancellationToken);

            // SUCCESS: Complete the TCS with the result
            tcs.SetResult(new TaskCompletion(
                translatedMarkdown,
                translateModel.OriginalMarkdown,
                translateModel.Language,
                true,
                DateTime.Now));
        });
    }
    catch (TranslateException e)
    {
        // FAILURE: Complete the TCS with an exception
        tcs.SetException(new Exception($"Translation failed after 3 retries: {e.Message}"));
    }
    catch (Exception e)
    {
        // UNEXPECTED: Complete the TCS with the exception
        tcs.SetException(e);
    }
}
```

المتصل `Task<TaskCompletion>` -والتي حصلوا عليها فوراً عندما اتصلوا `Translate()` -اكتملت الآن، يمكنهم:

- `await` إذا كانوا يريدون أن مربع
- 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 `IsCompleted` إلى
- 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 `IsFaulted` لنرى إن كانت قد فشلت
- 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 1 ف-3 `Result` إلى تحصل على المحتوى المترجم

---


## المركز - الدولة التي خرجت من دولة مهمة

عند عرض المهام إلى المستخدم، نقوم بإسقاط حالة المهمة الحية إلى نموذج عرضي:

```csharp
// From TranslateTask.cs
public TranslateResultTask(TranslateTask task, bool includeMarkdown = false)
{
    TaskId = task.TaskId;
    StartTime = task.StartTime;
    Language = task.Language;

    // Check for faulted state first -a faulted task is also "completed" in .NET terms
    if (task.Task?.IsFaulted == true)
    {
        Failed = true;
        Completed = false;
        TotalMilliseconds = (int)(DateTime.Now - task.StartTime).TotalMilliseconds;
    }
    else if (task.Task?.IsCompletedSuccessfully == true)
    {
        Completed = true;
        Failed = false;
        var endTime = task.Task.Result.EndTime;
        TotalMilliseconds = (int)((endTime - task.StartTime)!).Value.TotalMilliseconds;
        EndTime = endTime;
    }
    else
    {
        // Still in progress
        Completed = false;
        Failed = false;
        TotalMilliseconds = (int)(DateTime.Now - task.StartTime).TotalMilliseconds;
    }

    if (Completed && includeMarkdown)
    {
        var result = task.Task?.Result;
        if (result == null) return;
        OriginalMarkdown = result.OriginalMarkdown;
        TranslatedMarkdown = result.TranslatedMarkdown;
    }
}
```

### مذكرة مقدمة من دولة عضو

(الإنترات) `Task` لَهُ بَعْض تركيباتِ الحالةِ الشاذةِ:

- `IsCompleted` حقاً لـ **-لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا، لا** الإنجاز الناجح والمهمات المتعثرة
- `IsCompletedSuccessfully` فقط من أجل النجاح
- `IsFaulted` يعني أنه رمى استثناء
- `IsCanceled` يعني أنه كان قد أُلغي

لذا يجب عليك التحقق `IsFaulted` قبل قبل `IsCompleted`أو ستعامل الفشل على أنه نجاح

---


## الـ UI - HTMX

الـ اعرض لـ تحديثات استخدام HTMx s `hx-trigger`:

```html
@* From _GetTranslations.cshtml *@
@{
    var allCompleted = Model.All(x => x.Completed);
    var trigger = allCompleted ? "none" : "every 5s";
}

<div class="translationpoller"
     hx-get="/editor/get-translations"
     hx-swap="outerHTML"
     hx-trigger="@trigger">
    <table class="table">
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @if (item.Completed)
                    {
                        <a href="#" x-on:click.prevent="viewTranslation('@item.TaskId')">View</a>
                    }
                    else if (item.Failed)
                    {
                        <text>Failed</text>
                    }
                    else
                    {
                        <text>Processing</text>
                    }
                </td>
                <td>
                    @if (item.Completed)
                    {
                        <i class='bx bx-check text-green'></i>
                    }
                    else if (item.Failed)
                    {
                        <i class='bx bx-x text-red'></i>
                    }
                    else
                    {
                        <img src="~/img/3-dots-bounce.svg" />
                    }
                </td>
                <td>@item.Language</td>
                <td>@TimeSpan.FromMilliseconds(item.TotalMilliseconds).Humanize()</td>
            </tr>
        }
    </table>
</div>
```

الجزء الماهر: `hx-trigger="@trigger"` التغييرات استناداً إلى الحالة:

- إذا كانت المهام لا تزال قيد التشغيل: كل 5 ثوان
- إذا تم إنجاز جميع المهام: وقف الاقتراع`"none"`)

هذا ** تنظيم عمليات الاقتراع الذاتي** -يتوقف تلقائياً عندما لا يكون هناك شيء ليشاهده

---


## جاري أنت جاريQQQQ

عندما يقرض المستخدم "View"، نجلب الترجمة المكتملة:

```csharp
// From TranslateAPI.cs
[HttpGet("get-translation/{taskId}")]
public async Task<Results<JsonHttpResult<TranslateResultTask>, BadRequest<string>>> GetTranslation(
    string taskId)
{
    var userId = Request.GetUserId(Response);
    var tasks = translateCacheService.GetTasks(userId);

    var translationTask = tasks.FirstOrDefault(t => t.TaskId == taskId);
    if (translationTask == null)
        return TypedResults.BadRequest("Task not found");

    // Include the markdown content in the response
    var result = new TranslateResultTask(translationTask, includeMarkdown: true);
    return TypedResults.Json(result);
}
```

الـ جافاScript ثمّ يُمْكِنُ مُحرّر:

```javascript
// From translations.js
export function viewTranslation(taskId) {
    fetch(`/api/translate/get-translation/${taskId}`)
        .then(response => response.json())
        .then(data => {
            // Show the translated content area
            document.getElementById("translatedcontent").classList.remove("hidden");

            // Populate the editors
            var originalMde = window.mostlylucid.simplemde.getinstance('translatedcontentarea');
            originalMde.value(data.originalMarkdown);

            var mde = window.mostlylucid.simplemde.getinstance('markdowneditor');
            mde.value(data.translatedMarkdown);
        });
}
```

---


## لِمَ هذا هو الخصوصيّة - الأمن

السبب:

- **لا يوجد مُخزن في المخبأ** - البيانات الوصفية المتعلقة بالمهمة فقط (ID, timttamp, اللغة)
- **المحتوى موجود فقط في الدالة** - التي هي في الذاكرة، ومرتبطة إلى المهمة
- **الـ نافذة هو مُحْرِد** 5 مهام لكل مستخدم، والاحتفاظ بـ 6 ساعات كحد أقصى
- **كُلّ كلّ كلّ شيء يَتحللُ طبيعياً** - تثبّتات انتهاء الصلاحية
- **لا شيء** - لا سجلات، لا طوافر، لا قاعدة بيانات
- **لا يمكنك عن طريق الخطأ حفظ PII** - ليس هناك مكان لها للذهاب

هذا هو الهيكل *أتمنى لو استخدمت المتصفحات والأطر الأمامية لعمليات الدورة*.

---


## السلوك الناشئ

ما تحصل عليه بدون التفكير ملياً

كيف يمكن
|---------|-----|
| **الماه** (ك) عملة مقننة عن طريق قناة + نمط السيماصور
| **لفرة** * المزيد من الحمل * المزيد من الضغط على الظهر * سلوك ثابت *
| **** العمليات الدقيقة موجودة بما يكفي لتفتيش
| **القابل** ○ يمكن الوصول إلى النتائج المستكملة حتى تنتهي صلاحيتها
| **(أ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -** ▪ توحد الخصوصية والبساطة لمرة واحدة
| **التنفيذ** ♪ المهام القديمة تسقط بعيدا، المهام ذات الصلة تظل ♪

تماما مثل مخبأ LRU شحذ الذاكرة السلوكية، ونافذة التشغيل المتداولة شحذ وجهة نظر التنفيذ.

---


## إلى مستخدم هذا هذا

استخدمه عندما:

- يجب عدم الثبات في بيانات المستخدم
- العمليات قصيرة الأجل (الثاني إلى الدقائق)
- المسائل المُرسِل المُرسِل المُراسِ المُرْجِ المُرْجِ المُرْجِ المُزْجِج
- 
- مُلْفِثات الاستقرار
- تريد ردّا فوريا + معلومات أساسية

لا تستخدمه عندما:

- تحتاج إلى قيمة حقيقية (استخدم a حقيقي سطر)
- العمليات التي تأخذ ساعات عمل (استخدام معلق إطلاق النار أو ما يماثل ذلك)
- تحتاج إلى المواد الدهنية الدقيقة تماماً (استخدم معاملة موزعة)
- الحاجة إلى تنسيق خوادم متعددة متعددة (استخدام Redis أو سمسار رسالة)

---


## - التنفيذ بإجراءات موجزة كفلسفة مصمِّمة

في هذه الحالة: [أولاً - المادة من الاتحاد الروسي](/blog/learning-lrus-when-capacity-makes-systems-better) كان حول **التعلم بالنسيس**، هذا هو هذا هو عن **عن طريق التنفيذ بالتبخر**.

النظام يتذكر بالضبط ما يكفي ليكون مفيداً وليس أكثر من ذلك

إنه:

- مُصدِر مُصْرِف
- مُحدِد مُحدِد مُحدِد
- 
- 
- م
- مُقَرَّرًا مِن مُنْ مِن
- 1 ف-5، 1 ف-4، 1 ف-3، 1 خ م، 1 خ م، 1 م و، 1 م و، 1 م و، 1 م و، 1 م و، 1 م و، 1 م أ م و، 1 م أ م
- اللجنة الأولى

أنت تعرف بالفعل كيف تنفذه: `TaskCompletionSource`)أ( `Channel`(ج) `IMemoryCache` مع إنتهاء الإنهيار، وعامل خلفية.

**النار... ولا تنساها تماماً.**

---


## ما هو التالي؟

داخل **[الجزء 2: بناء مكتبة تنفيذ اقتصادي يمكن إعادة استخدامها](/blog/ephemeral-execution-library)**سنحول هذا النمط إلى مساعد

- `EphemeralForEachAsync<T>` - مثل - `Parallel.ForEachAsync` مع عملية التتبع
- خطوط الأنابيب الرئيسية للتنفيذ التتابعي لكل كيان
- `EphemeralWorkCoordinator<T>` - طاولة عمل طويلة الأجل يمكن ملاحظتها
- المنسقون المعينون/المنسقون النوعون `AddEphemeralWorkCoordinator<TCoordinator>` (تقريباً) `AddHttpClient`)
- تكامل كامل DD مع نطاق و نمط حياة
- مقارنة نُهُج أخرى (تدفق البيانات، القنوات، خدمات المعلومات الأساسية)

---


## 

- [تعلّم LRUs - عندما تتخطى القدرة تجعل نظامك افضل](/blog/learning-lrus-when-capacity-makes-systems-better) -مقالة المرافقة على الذاكرة الموثقة
- [الجزء 2: بناء مكتبة تنفيذ اقتصادي يمكن إعادة استخدامها](/blog/ephemeral-execution-library) - التنفيذ الكامل
- [وثائق المهام](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.taskcompletionsource-1) - عوارض Microroficroficroficroficroficro' s على نمط TCS
- [النظام ، النظام ، النظام ، الإصدار ،](https://learn.microsoft.com/en-us/dotnet/core/extensions/channels) - المنتج - المستهلك الاستهلاكي الذي نستخدمه
- [وثائق مجلس الوثائق](https://learn.microsoft.com/en-us/aspnet/core/performance/caching/memory) - المخبأ الداخلي لشبكة الإنترنت