Sobes.tech

Τι επέτρεψε την αύξηση της διαμέσου υπηρεσίας αναπαραγωγής από περίπου 300 σε 700 μηνύματα ανά δευτερόλεπτο; Πώς χρησιμοποιήθηκαν τα ConcurrentDictionary και SemaphoreSlim;

132

Εργασία: Λαμβάνονται γεγονότα από χρήστες, καθένα πρέπει να επαληθευτεί σε εξωτερική πηγή, αλλά αυτή δεν απαντά άμεσα. Υλοποιήστε το VerificationService που: - Δέχεται γεγονότα από χρήστες - Προσπαθεί να επαληθεύσει κάθε ένα επικοινωνώντας με μια εξωτερική υπηρεσία - Αν η απάντηση είναι PENDING, επαναλαμβάνει την αποστολή αυτού του γεγονότος όχι νωρίτερα από 5 δευτερόλεπτα - Μέγιστο 3 προσπάθειες, μετά τις οποίες το αναγνωριστικό του γεγονότος εμφανίζεται στο stdout με κατάσταση FAILED - Επιτυχώς επεξεργασμένα γεγονότα εμφανίζονται στο stdout με κατάσταση VERIFIED Τα πρότυπα και οι σφραγίδες των εξωτερικών εξαρτήσεων έχουν ήδη υλοποιηθεί: 1. VerificationStatus 2. Event 3. VerificationResult 4. IExternalSource public enum VerificationStatus { OK, Pending, Error } public record Event(string Id, string Payload); public record VerificationResult(VerificationStatus Status, string? Message = null); public interface IExternalSource { VerificationResult Verify(string eventId); } public class VerificationService { private readonly IExternalSource _externalSource; private const int MaxAttempts = 3; private static readonly TimeSpan RetryDelay = TimeSpan.FromSeconds(5); public VerificationService(IExternalSource externalSource) { _externalSource = externalSource; } // TODO: implement }

63

public class A { public virtual void Print1() { System.Console.Write("A"); } public void Print2() { System.Console.Write("A"); } } public class B : A { public override void Print1() { System.Console.Write("B"); } } public class C : B { public new void Print2() { System.Console.Write("C"); } } static void Main(string[] args) { var c = new C(); A a = c; a.Print1(); a.Print2(); c.Print2(); } Τι θα είναι στο stdout;

60

Λίστα<Action> ενέργειες = new List<Action>(); για (var count = 0; count < 10; count++) { ενέργειες.Add(() => System.Console.WriteLine(count)); } foreach (var ενέργεια in ενέργειες) { ενέργεια(); } Τι θα είναι στο stdout;

60

Τι συμβαίνει όταν περιμένουμε την πρώτη ολοκληρωμένη εργασία με Task.WhenAny ενώ άλλες εργασίες εξακολουθούν να εκτελούνται;

58

Πώς να περιορίσετε το βαθμό παραλληλισμού κατά την επεξεργασία ενός συνόλου ασύγχρονων εργασιών;

54

Πώς να οργανώσετε την αναμονή για νέα γεγονότα αν η ουρά είναι άδεια, και ποια είναι η διαφορά μεταξύ Channel και ConcurrentQueue;

51

public struct S : IDisposable { private bool dispose; public void Dispose() { dispose = true; } public bool GetDispose() { return dispose; } } Τι θα είναι στο stdout;

48

[όνομα] πες μας για μια ενδιαφέρουσα εργασία ή λύση στην τρέχουσα ή προηγούμενη εργασία σου που θα ήθελες να μοιραστείς.

38