.NET 8 ਦਾ TimeProvider ਅਤੇ ਇੱਕ ਸਿੰਗਲ SynchronizationContext ਤਬਦੀਲੀ retry-logic ਯੂਨਿਟ ਟੈਸਟਾਂ ਵਿੱਚੋਂ ਕਈ ਸਕਿੰਟ ਬਚਾ ਸਕਦੀ ਹੈ, ਜੋ ਕਿ ਅਸਲ ਵਿੱਚ real sleeps ਕਾਰਨ ਖਾਲੀ ਬੈਠੇ ਰਹਿੰਦੇ ਹਨ। ਇੱਕ ਟੈਸਟ ਜੋ ਪਹਿਲਾਂ ਸੱਤ ਸਕਿੰਟ ਲੈਂਦਾ ਸੀ, ਹੁਣ ਕੁਝ ਦਸਾਂ ਮਿਲੀਸਕਿੰਟਾਂ ਵਿੱਚ ਖਤਮ ਹੋ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਇਸ ਬਦਲਾਅ ਦਾ production ਵਿੱਚ ਚਲਾਉਣ ਲਈ ਕੋਈ ਵਾਧੂ ਖਰਚਾ ਨਹੀਂ ਆਉਂਦਾ।
ਦੇਰੀ ਕਿਉਂ ਮਾਇਨੇ ਰੱਖਦੀ ਹੈ
ਬਹੁਤ ਸਾਰੇ retry helpers exponential backoff ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ: ਪਹਿਲਾਂ 1 ਸਕਿੰਟ, ਫਿਰ 2 ਸਕਿੰਟ, ਫਿਰ 4 ਸਕਿੰਟ, ਅਤੇ ਇਸੇ ਤਰ੍ਹਾਂ। Production ਵਿੱਚ, ਇਹ ਸੇਵਾਵਾਂ (services) ਨੂੰ ਫੇਲ ਹੋ ਰਹੇ endpoint 'ਤੇ ਵਾਰ-ਵਾਰ ਹਮਲਾ ਕਰਨ ਤੋਂ ਬਚਾਉਂਦਾ ਹੈ। ਇੱਕ test suite ਵਿੱਚ, ਉਹੀ ਕੋਡ ਅਸਲ ਘੜੀ 'ਤੇ Task.Delay ਨੂੰ ਕਾਲ ਕਰਦਾ ਹੈ, ਇਸ ਲਈ test thread ਅਸਲ ਵਿੱਚ ਸੌਂ ਜਾਂਦਾ ਹੈ। ਜੇਕਰ ਇਸ ਨੂੰ ਦਰਜਨਾਂ ਟੈਸਟਾਂ ਨਾਲ ਗੁਣਾ ਕੀਤਾ ਜਾਵੇ, ਤਾਂ ਬਿਨਾਂ ਕਿਸੇ ਫੰਕਸ਼ਨਲ ਫਾਇਦੇ ਦੇ continuous-integration (CI) pipeline ਮਿੰਟਾਂ ਤੱਕ ਵਧ ਜਾਂਦੀ ਹੈ। ਇਹ “sleep tax” ਸਿਰਫ਼ ਸਮੇਂ ਦੀ ਬਰਬਾਦੀ ਹੈ।
TimeProvider ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ
.NET 8 ਨੇ TimeProvider ਪੇਸ਼ ਕੀਤਾ ਹੈ, ਜੋ ਕਿ system clock ਉੱਤੇ ਇੱਕ abstraction ਹੈ। ਇੱਕ class ਜਿਸ ਨੂੰ ਮੌਜੂਦਾ ਸਮੇਂ ਦੀ ਲੋੜ ਹੈ ਜਾਂ ਜਿਸ ਨੂੰ ਦੇਰੀ ਕਰਨ ਦੀ ਲੋੜ ਹੈ, ਉਹ DateTime.UtcNow ਜਾਂ Task.Delay ਨੂੰ ਸਿੱਧਾ ਕਾਲ ਕਰਨ ਦੀ ਬਜਾਏ TimeProvider instance ਨੂੰ ਸਵੀ
